rubyonrails-activerecordfilter,其中引用表的值大于0

tf7tbtn2  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(302)

我目前正在尝试从rubyonrails中的选定数据中筛选出那些属性“amount\u available”大于零的数据。通过@events.where(ticket\u categories.amount\u available>0)这不会有问题,但ticket\u categories是一个长度不固定的数组,因为可以有多个类别。如何轻松地遍历where子句中的数组并进行比较?
我只需要输出中至少有一个关联类别的可用数量大于0的事件。
这是我的密码:

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

j0pj023g1#

你可以锁链 where 条件,您可以添加基于关联模型的条件 joins :

  1. available_events = @events
  2. .where('date >= ?', Date.current)
  3. .joins(:ticket_categories).where('ticket_categories.amount > 0')
  4. .group(:id)
  5. render json: available_events

注意:数据库连接可能返回重复的记录(取决于数据库结构和条件),因此需要 group 结果由 id .

gt0wga4j

gt0wga4j2#

它只是一个表示,因为事件表通过has\ u many链接到ticketcategories。我使用postgressql,现在可以用以下代码来解决它:

  1. @upcoming_events = @close_events.where("date >=?", Date.current)
  2. available_events = []
  3. @upcoming_events.each do |event|
  4. event.ticket_categories.each do|category|
  5. if category.amount_available > 0
  6. available_events.push(event)
  7. break;
  8. end
  9. end
  10. end
  11. render json: available_events

相关问题