如何在Rails 2中编写/链接查询?

时间:2011-08-02 21:18:39

标签: ruby-on-rails

我有一个查询获取具有一个条件的行的总计数,第二个查询获取具有相同条件的行的总计数加上另一个条件。理想情况下,我不会在代码中重复自己,而只需将额外条件链接/组合到第一个查询中。

我在考虑这样的事情。

query1 = Table.find(:all, :conditions => "condition1")
query2 = query1.find(:all, :conditions => "condition2")

找出Table.count用例的样子也很好,因为那是我此刻想要做的事情。

我猜测ActiveRecord :: Base有一些方法会返回查询对象而不是执行它,但我没有在文档中找到它。

1 个答案:

答案 0 :(得分:2)

虽然Rails 3使这个变得更加容易,但你总是可以在Rails 2中使用一个模拟它的小黑客来实现它:

# config/initializers/rails2_where_scope.rb
class ActiveRecord::Base
  named_scope :where, lambda { |conditions| {
    :conditions => conditions
  }}
end

通过这种方式,您可以以与Rails 3向前兼容的方式将多个条件链接在一起:

query2 = Table.where(condition1).where(condition2).all

Rails 3使用AREL来完成大部分SQL计算,这就是为什么它比Rails 2更灵活。