替代与杂乱的范围构建查询的替代方法



我正在通过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)
  }

我多次执行此操作,并且功能正常。我更喜欢一个为可读性构建条件的单个条件(而不是必须读取10个范围以了解实际查询)。

有没有干净的方法来执行此操作?

这个

怎么样
 Account.includes(:assets, :location, :category).joins(:category).where(Category.arel_table[:name].eq(category)) 

最新更新