Rails:避免关联计数的缓存

时间:2013-02-06 18:35:40

标签: ruby-on-rails rails-activerecord

我有以下Rails代码:

class Shop < ActiveRecord::Base  
  # ...
  def validate_books_have_authors
    self.books.each do |book|
      # Urghh...caching book.authors unless we call directly
      # puts book.authors
      errors[:books] << t('book.no_authors', :book => book.name) unless book.authors.any?
    end
  end
end

首次运行时,验证器将正确处理...但如果我再次运行相同的方法,book.authors.any的值?返回缓存值,除非我取消注释将book.authors行放入

所以,真正的简单问题是:我如何确保book.authors.any的价值?是不是缓存了?

2 个答案:

答案 0 :(得分:0)

您应该能够使用exists?或致电count并检查结果是否大于零。

计数通常会慢一点,因为它需要从数据库中进行更多工作才能确定精确计数。

答案 1 :(得分:0)

供参考:我通过更改.any来修复此问题。到.present?