1

我正在通过 Ruby 创建查询以生成报告。

query = Account.includes(:assets, :location, :category)

报告请求有多个可选参数(例如可以发送类别,或者根本无法初始化)。

目前,我在通过应用范围建立和分配查询后考虑这些

if category.present?
  cat = Category.find_by_name(category)
  query = query.in_category(cat) if cat.present?
end

范围是

scope :in_category, lambda { |category|
    where("#{table_name}.category_id = :category_id", :category_id => category.id)
  }

我多次这样做,它是有效的。我更喜欢为可读性而构建一个 Where 条件(而不是必须阅读 10 个范围来理解实际查询)。

有没有一种干净的方法可以做到这一点?

4

1 回答 1

0

这个怎么样

 Account.includes(:assets, :location, :category).joins(:category).where(Category.arel_table[:name].eq(category)) 
于 2012-10-22T09:21:03.510 回答