簡體   English   中英

Ruby on Rails - Active Record 過濾器,其中引用表的值 > 0

[英]Ruby on Rails - Active Record FIlter where the value of a referenced table is > 0

我目前正在嘗試從 Ruby on Rails 中的選定數據中過濾掉那些屬性“可用量”大於零的數據。 這通過@events.where(ticket_categories.amount_available > 0) 是沒有問題的,但是ticket_categories 是一個沒有固定長度的數組,因為可以有多個類別。 您如何輕松地遍歷 where 子句中的數組並進行比較?

我只需要 output 中的事件,其中至少一個關聯類別的 amount_available > 0。

這是我的代碼:

      @upcoming_events = @events.where("date >=?", Date.current)
      @available_events = @upcoming_events.where(ticket_categories[0].amount_available > 0)
      json_response(@available_events)

您可以鏈接where條件,也可以添加基於關聯模型和joins的條件:

  available_events = @events
    .where('date >= ?', Date.current)
    .joins(:ticket_categories).where('ticket_categories.amount > 0')
    .group(:id)

  render json: available_events

注意:數據庫連接可能會返回重復記錄(取決於您的數據庫結構和條件),因此需要按id對結果集進行group

它只是一種表示,因為事件表通過 has_many 鏈接到 TicketCategories。 我使用 PostgresSQL,現在可以使用以下代碼解決它:

      @upcoming_events = @close_events.where("date >=?", Date.current)
      available_events = []
      @upcoming_events.each do |event|
          
          event.ticket_categories.each do|category|
              if category.amount_available > 0
                  available_events.push(event)
                  break;
              end
          end
        
      end
      render json: available_events

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM