[英]SQL multiple table nested group by using Ruby on Rails Active Record
[英]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.