我正在尝试获取可跟随的项目并尝试获取这些用户的帖子。以下是我正在使用的代码
def dashboard
@posts = []
@Bposts = []
@users = Follow.where('followable_type == ?',"User").where('follower_id == ?',current_user.id)
@blogs = Follow.where('followable_type == ?',"Blog").where('follower_id == ?',current_user.id)
@users.each do |user|
@posts << Post.where('user_id == ?',user.followable_id).where('blog_id == ?',nil)
end
@blogs.each do |blog|
@Bposts << Post.where('blog_id == ?',nil)
end
if @posts.count != 0
@posts.each do |post|
@comment = post.comments.build
end
end
if @Bposts.count != 0
@Bposts.each do |post|
@comment = post.comments.build
end
end
end
答案 0 :(得分:0)
NoMethodError: undefined method `comments' for #<Post::ActiveRecord_Relation:0x007fbaee1f8f00>
您收到此错误的原因是,您在comments
对象上调用<Post::ActiveRecord_Relation>
,但实际上您想在Post对象上执行此操作。
目前,您的@posts
是一个<Post::ActiveRecord_Relation>
数组,因此当您循环浏览@posts
时,每个post
都是<Post::ActiveRecord_Relation>
,这会导致此问题当你在上面调用post.comments.build
时出错。
要解决此错误,您必须更改此错误:
@users.each do |user|
@posts << Post.where('user_id == ?',user.followable_id).where('blog_id == ?',nil)
end
为:
@users.each do |user|
@posts << Post.where('user_id == ?',user.followable_id).where('blog_id == ?',nil).first
end
这样,您将在post
实例变量中获得一组@posts
个对象,然后您可以遍历它们,每次获得一个post
并调用:{{1每个post.comments.build
。
您还需要对post
循环进行类似的更改。确保在@Bposts
对象上调用comment
方法,而不是Post
对象。