1

レポートを生成するために、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 個のスコープを読まなければならないのではなく) 読みやすさのために構築されている単一の Where 条件を好むでしょう。

これを行うためのきれいな方法はありますか?

4

1 に答える 1

0

これはどう

 Account.includes(:assets, :location, :category).joins(:category).where(Category.arel_table[:name].eq(category)) 
于 2012-10-22T09:21:03.510 に答える