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

参考までに: .any? を変更してこれを修正しました。提示する?

于 2013-02-06T19:52:36.170 に答える
0

結果がゼロより大きいことを使用exists?または呼び出して確認できる必要があります。count

カウントは通常、正確なカウントを確立するためにデータベースからより多くの作業を必要とするため、少し遅くなります。

于 2013-02-06T18:56:40.183 に答える