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))
機能しますが、少しばかげているように思えます。
誰でもこれに光を当てることができますか?