用凌乱的范围构建查询的替代方法?

时间:2012-10-19 16:38:39

标签: sql ruby-on-rails ruby

我正在通过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个范围以理解实际查询)。

有干净的方法吗?

1 个答案:

答案 0 :(得分:0)

这个怎么样

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