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

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

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

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

j0pj023g1#

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

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

  render json: available_events

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

gt0wga4j

gt0wga4j2#

它只是一个表示,因为事件表通过has\ u 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

相关问题