NoMethodError:对于#<post :: activerecord_relation:0x007fbaee1f8f00>的未定义方法`comments'

时间:2015-08-20 06:10:46

标签: ruby-on-rails-4 activerecord

我正在尝试获取可跟随的项目并尝试获取这些用户的帖子。以下是我正在使用的代码

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

1 个答案:

答案 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对象。