Rails ActiveRecord:组合:include和:条件查询可能吗?

时间:2010-02-21 04:28:30

标签: ruby-on-rails activerecord include conditional-statements findall

想象一下,我有维基文章,有许多修订版。我想通过数据库使用ActiveRecord进行查询,该数据库仅返回那些具有过去24小时内更新的修订的文章。这样的事情有可能吗?

我想它会是这样的:

Articles.find_all(:include => :revisions, 
                  :conditions => {:revision[updated_at] => 1.week.ago..Time.now.utc})

如果这是不可能的,是否有某种类型的原始SQL我可以传递给find_by_SQL,这样做会有什么作用?

2 个答案:

答案 0 :(得分:4)

如果您只需要文章并且不需要急切加载所有修订版,则可以使用:join。它使用较少的内存,因为它没有预加载每篇文章的所有修订版。使用:如果您要执行article.revisions之类的操作,请使用。

Article.find(:all, 
  :joins => :revisions, 
  :conditions => ["revisions.updated_at > ?", 24.hours.ago]
)

答案 1 :(得分:3)

根据您的模型的确切命名方式,它将会是这样的。

Article.find(:all, :include => :revisions, :conditions => ["revisions.updated_at > ?", 1.week.ago])