質問

私の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)

これにより、必要なすべての投稿が検索され、それらのコメントが熱心に読み込まれます。ただし、大規模なレコードセットの場合は、速度が遅くなり、パッセンジャー/雑種インスタンスのメモリサイズを使い果たしてしまうため、これはお勧めしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top