Rails で Arel を使用する - をActiveRecord::Relation効果的に作成する方法を探していますがSELECT * FROM table、さらに操作することができます。
たとえば、複数のカテゴリに分割されたモデルがあり、次の方法でこれらのカウントを返します。
relation = Model.where(:archived => false) # all non-archived records
record_counts = {
:total => relation.count,
:for_sale => relation.where(:for_sale => true).count
:on_auction => relation.where(:on_auction => true).count
}
COUNTこれは問題なく動作し、実際にレコード自体を選択するのではなく、MySQL に対してクエリを実行できるという利点があります。
ただし、アーカイブされたレコードをカウントに含める必要がありますが、relation = Model.all結果は にArrayなり、探しているのはActiveRecord::Relationです。
これを実行する唯一の方法は です。これはmodel.where(model.arel_table[:id].not_eq(nil))機能しますが、少しばかげているように思えます。
誰でもこれに光を当てることができますか?