2

在我的 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
未定义的方法“加载?” 为了 #

来自 Association_preload.rb 第 228 行

这是一个已知问题,还是我做错了什么或不受支持?

我似乎在以下位置找到了一些关于此的讨论:http ://groups.google.com/group/maine-ruby-users-group/browse_thread/thread/796cf58b62f9bc52

4

2 回答 2

1

FWIW,

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

于 2009-07-01T10:40:48.560 回答
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)

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

于 2009-07-01T11:22:00.910 回答