2009-07-01 9 views
2

2.3.2アプリRailsの私のRailsで熱心ロード、可能なバグ

私は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

これは既知の問題ですか、間違っているかサポートされていない何かをしていますか?私は私のクラスで二回approved_commentsを定義していた、私は私がここで台無しにしているかもしれないと思うhttp://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52

+0

条件:= {{approved => true}、および条件=> {:permalink => permalink}の条件でハッシュを使用する方が安全です。私はより多くのデータベースには無関心です。 – klew

+0

Post.find(:first、....)の代わりにPost.first(:conditions ...)を使用することもできます。また、承認されたコメントを見つけるためにnamed_scopesを使用することを検討してください。 – klew

+0

ありがとうございました、私はそれを覚えています。 –

答えて

1

FWIW、

は、私は、これについて少し議論を見つけるように見えます。私が発見した不運な副作用は、熱心なローディングがそのフィルタリングで活躍し、左の地獄に入ることでした。だから、私はすべてを選択してコードでフィルタリングすることでその問題を解決しました。これは、あなたがしたいと彼らのために、その後熱心な負荷のコメントすべての記事を検索します

Post.find(:all, :joins => :approved_comments, :conditions => ["comments.approved = ? AND permalink = ?", true, permalink], :include => :approved_comments) 

:よう

class Post 
    has_many :approved_comments, :class_name => 'Comment' 
end 

class Comment 
    belongs_to :post 
end 

、その後何か:

0

あなたのような何かを試みることができます。大規模なレコードセットでは、私はそれに反対することをお勧めします、それはあなたの乗客/雑種のインスタンスのメモリサイズを遅くして吹き飛ばします。

+0

ええ、なぜ私が裸を好むのか:include、新しい熱心な読み込みは2つのクエリを実行します。裸のインクルード、コメント用と、ポスト用です。これは:http://www.samsaffron.com/archive/2008/03/15/You+should+be+very+careful+when+using+ActiveRecord+eager+loadingは完全に固定されていない –

+0

おそらく、私はないそれは非常に簡単に制御から抜け出すことができるので、裸のファンが含まれています。だから私はこのようなことは気にしません。まだ2つのクエリしかありませんが、すべてをロードして必要なものを決めるのではなく、必要なレコードを読み込むだけです。 – nitecoder

関連する問題