Ruby on rails Rails正在加载,可能存在错误

Ruby on rails Rails正在加载,可能存在错误,ruby-on-rails,ruby,activerecord,eager-loading,Ruby On Rails,Ruby,Activerecord,Eager Loading,在我的Rails 2.3.2应用程序中 我有两种型号: class Post has_many :approved_comments, :class_name => 'Comment', :conditions => ['approved => ?', true] end class Comment belongs_to :post end 由于某种原因,当我试图加载我的评论时,我得到了一个错误 post = Post.find(:first, :conditio

在我的Rails 2.3.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
未定义的方法'loaded'# 来自association_preload.rb第228行

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

我似乎在以下网站上找到了一些关于这方面的讨论:

FWIW


我想我可能把这里搞砸了,我在课堂上两次批准了_的评论。我发现了一个不幸的副作用,那就是急切的加载会影响过滤效果,然后进入左地狱。所以我通过选择所有内容并在代码中过滤来解决这个问题

您可以尝试以下方法:

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)
然后是这样的:

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)

这将找到你想要的所有帖子,然后为它们加载评论。在一个大的记录集中,我建议不要使用它,因为它会很慢,并且会耗尽您的passenger/mongrel实例的内存大小。

对conditions::conditions=>{:approved=>true}和:conditions=>{:permalink=>permalink}使用哈希更安全。我更不依赖数据库。您也可以使用Post.first(:conditions…)而不是Post.find(:first…)。也考虑使用NealDeSee范围来寻找认可的评论。感谢KLW,我会记住这一点,我在几年的休息后搬回一些Rails DEV,所以它有点赶上。这就是为什么我更喜欢裸露:包含,新的渴望加载将执行2个查询,一个裸露的包含,一个为评论,一个为POST,这对记忆更友好。这:不是完全固定的也许,我不是裸体包含的粉丝,因为它很容易失控。这就是为什么我不介意这种事情,它仍然只有2个查询,但它肯定只加载我需要的记录,而不是加载所有内容,然后决定它需要什么。