【问题标题】:ActiveRecord how to know if an instance model is into one of the class scopes?ActiveRecord 如何知道一个实例模型是否属于某个类范围?
【发布时间】:2012-11-16 21:22:13
【问题描述】:

我在我的 ActiveRecord 类中定义了一个范围,比如说:

class Book < ActiveRecord::Base
  scope :old, where( "published_at < ?", 1.year.ago )
end

我想问这个类的任何实例这样的事情:

book.old?

有没有办法在不复制where 定义的情况下做到这一点?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord


    【解决方案1】:

    使用您的作用域对数据库运行另一个查询:

    Book.old.exists?(book.id)
    

    如果你想在多个地方重复使用这个,最好实现一个方法:

    def old?
      Book.old.exists?(id)
    end
    
    book.old?
    

    【讨论】:

    • 您可以执行 Book.old.include?(book),但这会加载和数组并在该数组上调用 #include?(),因此性能会随着记录的增多而下降。
    • 您提到的过载不能接受.include? 方法
    • where(:id =&gt; book.id).any? 是一个非常好的.. 我会像这样改进它Book.old.exists?(self.id).. 我正在更新你的答案,如果你接受修改,请告诉我。
    • 是的,太好了! exists? 现在看起来很明显,因为其他人已经写了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多