开发者

How can I compose/chain queries in Rails 2?

开发者 https://www.devze.com 2023-03-25 15:57 出处:网络
I have one query that gets the total count of rows with one condition, and a second query that gets the total count of rows with the same condition plus another condition.Ideally, I wouldn\'t repeat m

I have one query that gets the total count of rows with one condition, and a second query that gets the total count of rows with the same condition plus another condition. Ideally, I wouldn't repeat myself in the code and could instead just cha开发者_如何学JAVAin/compose the extra condition onto the first query.

I'm thinking of something like this.

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

It'd also be nice to find out what this looks like for the Table.count use case, since that's what I'm actually trying to do at the moment.

I'm guessing that the ActiveRecord::Base has some method that will return the query object as opposed to executing it, but I haven't found that in the docs.


Although Rails 3 makes this significantly easier, you can always do it in Rails 2 with a little hack that emulates it:

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

This way you can chain together multiple conditions in a manner that's forward-compatible with Rails 3:

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

Rails 3 uses AREL to do most of the SQL computations so that's why it's much more flexible than Rails 2.

0

精彩评论

暂无评论...
验证码 换一张
取 消