Rails急切加载,可能的bug

时间:2009-07-01 10:25:35

标签: ruby-on-rails ruby activerecord eager-loading

在我的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

找到了一些关于此问题的讨论

2 个答案:

答案 0 :(得分:1)

FWIW,

我想我可能已经搞砸了,我已经在课堂上定义了两次approved_comments。我发现的不幸的副作用是,急切的加载与那个过滤一起玩,然后进入左加入地狱。所以我通过选择所有内容并在代码中过滤来解决它。

答案 1 :(得分:0)

您可以尝试以下方式:

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)

这将找到您想要的所有帖子,然后急切加载他们的评论。在一个大型记录集中,我建议不要这样做,它会很慢并且会破坏你的乘客/杂种实例的内存大小。