我正在通过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个范围以理解实际查询)。
有干净的方法吗?
答案 0 :(得分:0)
这个怎么样
Account.includes(:assets, :location, :category).joins(:category).where(Category.arel_table[:name].eq(category))