Ruby on Rails - 活动记录过滤器,其中引用表的值为 > 0



我目前正试图从RubyonRails中的选定数据中筛选出那些属性";amount_available"大于零。通过@events.where(ticket_categories.amount_available>0(,这不会有问题,但ticket_coategories是一个长度不固定的数组,因为可以有多个类别。如何在where子句中轻松地遍历数组并进行比较?

我只需要输出中至少一个相关类别具有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

注意:数据库联接可能返回重复的记录(取决于数据库结构和条件(,因此需要groupid设置的结果。

它只是一种表示,因为Events表通过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

最新更新