我有一个查询获取具有一个条件的行的总计数,第二个查询获取具有相同条件的行的总计数加上另一个条件。理想情况下,我不会在代码中重复自己,而只需将额外条件链接/组合到第一个查询中。
我在考虑这样的事情。
query1 = Table.find(:all, :conditions => "condition1")
query2 = query1.find(:all, :conditions => "condition2")
找出Table.count用例的样子也很好,因为那是我此刻想要做的事情。
我猜测ActiveRecord :: Base有一些方法会返回查询对象而不是执行它,但我没有在文档中找到它。
答案 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更灵活。