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