Rails の積極的な読み込み、バグの可能性
-
21-08-2019 - |
質問
私のRails 2.3.2アプリの場合
2 つのモデルがあります:
class Post
has_many :approved_comments, :class_name => 'Comment', :conditions => ['approved => ?', true]
end
class Comment
belongs_to :post
end
コメントを積極的にロードしようとすると、何らかの理由でエラーが発生します
post = Post.find(:first, :conditions => ["permalink=?", permalink], :include => :approved_comments
undefined method `loaded?' for #
association_preload.rb 228 行目から
これは既知の問題ですか、それとも何か間違ったことをしているのか、サポートされていないのでしょうか?
これについては、次の場所で少し議論されているようです。 http://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52
解決
FWIW、
ここで失敗したのかもしれません。クラス内でapproved_commentsを2回定義していました。私が発見した残念な副作用は、熱心な読み込みがそのフィルタリングと関係して、左結合地獄に陥ることでした。そこで、すべてを選択してコードでフィルター処理することでこの問題を回避しました。
他のヒント
次のようなことを試すことができます。
class Post
has_many :approved_comments, :class_name => 'Comment'
end
class Comment
belongs_to :post
end
そして次のようなもの:
Post.find(:all, :joins => :approved_comments, :conditions => ["comments.approved = ? AND permalink = ?", true, permalink], :include => :approved_comments)
これにより、必要なすべての投稿が検索され、それらのコメントが熱心に読み込まれます。ただし、大規模なレコードセットの場合は、速度が遅くなり、パッセンジャー/雑種インスタンスのメモリサイズを使い果たしてしまうため、これはお勧めしません。
所属していません StackOverflow