【问题标题】:Rails ActiveRecord: Is a combined :include and :conditions query possible?Rails ActiveRecord:是否可以组合 :include 和 :conditions 查询?
【发布时间】:2011-01-19 06:31:54
【问题描述】:

想象一下,我有很多修订的 wiki 文章。我想通过数据库使用 ActiveRecord 进行查询,它只返回那些在过去 24 小时内更新的文章。这样的事情可能吗?

我想它会是这样的:

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

如果这不可能,是否有某种类型的原始 SQL 可以传递给 find_by_SQL 来解决问题?

【问题讨论】:

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


    【解决方案1】:

    如果您只需要文章而不需要预先加载所有修订,则可以使用 :joins 代替。它使用较少的内存,因为它没有为每篇文章预加载所有修订。使用 :include 如果您将执行类似article.revisions 的操作。

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

    【讨论】:

    • 您想查找所有文章以及仅 24 小时前更新的那些修订的情况如何? (而不是减少文章的数量)。
    • 如果你想要文章和修订,我会使用 :include 而不是 :joins
    【解决方案2】:

    根据您对模型命名的准确程度,它会是这样的。

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

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多