在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))
,它可以工作,但似乎有点荒谬。谁能对此有所启示?
最佳答案
对于Rails 4.1及更高版本:Model.all
返回一个关系(以前没有)
对于Rails 4.0:Model.where(nil)
对于Rails 3.x:Model.scoped
关于ruby-on-rails - Rails/Arel:将所有记录选择为ActiveRecord::Relation,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5595901/