Sql 使用凌乱的范围构建查询的替代方案?

Sql 使用凌乱的范围构建查询的替代方案?,sql,ruby-on-rails,ruby,Sql,Ruby On Rails,Ruby,我正在通过Ruby创建一个查询以生成一个报告 query = Account.includes(:assets, :location, :category) 报告请求具有多个可选参数,例如,可以发送类别,或者根本无法初始化类别 目前,我通过使用Seopys建立和分配查询后考虑这些问题。 if category.present? cat = Category.find_by_name(category) query = query.in_category(cat) if cat.pres

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

query = Account.includes(:assets, :location, :category)
报告请求具有多个可选参数,例如,可以发送类别,或者根本无法初始化类别

目前,我通过使用Seopys

建立和分配查询后考虑这些问题。
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个作用域才能理解实际查询

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

这个怎么样

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