1

我有以下 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 的价值?没有缓存?

4

2 回答 2

0

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

计数通常会慢一些,因为它需要数据库做更多的工作来建立精确的计数。

于 2013-02-06T18:56:40.183 回答
0

供参考:我通过更改 .any? 展示?

于 2013-02-06T19:52:36.170 回答