在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/

10-09 21:42