首页 > 解决方案 > Ruby on Rails - 引用表的值大于 0 的 Active Record 过滤器

问题描述

我目前正在尝试从 Ruby on Rails 中的选定数据中过滤掉那些属性“amount_available”大于零的数据。这通过@events.where(ticket_categories.amount_available > 0) 是没有问题的,但是ticket_categories 是一个没有固定长度的数组,因为可以有多个类别。如何轻松地遍历 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)

标签: sqlruby-on-railsrubyactiverecordrails-activerecord

解决方案


您可以链接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.


推荐阅读