-1

我有三种模型:用户模型,Post模型和评论模型。用户可以创建帖子,然后在帖子的展示页面中,有一个包含表单发表评论的评论列表。评论已发布并显示在帖子的展示页面上。我选择在帖子中嵌套评论,并让用户独立。这里是我的routes.rb和我的每个模型评论与用户之间的belongs_to关联存在奇怪的错误

resources :users, except: [:index] 

资源:帖子,除了:[:指数:编辑:更新]做 资源:评论,只有:[:创建:销毁] 结束

class User < ActiveRecord::Base 
has_many :posts, dependent: :destroy 
has_many :comments, foreign_key: "author_id" 

class Post < ActiveRecord::Base 
belongs_to :user 
has_many :comments, dependent: :destroy 

class Comment < ActiveRecord::Base 
belongs_to :post 
belongs_to :author, class_name: "User" 

我的问题在于用户和评论(我相信)之间的关联。在我的岗位/节目的看法,我有以下代码:

<% if @comments.any? %> 
       <% @comments.each do |comment| %> 
        <p><%= comment.author_id %>: <%= comment.content %></p> 
       <% end %> 
      <% end %> 

此代码的工作,例如它打印评论如下(假设谁创造了它拥有的15 ID的用户)

15 :这是一条评论

通过这个,我很清楚它正在接受它的作者是谁。但在这里是问题:当我试图打印出以下:

<p><%= comment.author.full_name %>: <%= comment.content %></p> 

它给了我这个“动作控制器:捕获到异常”错误:

“未定义的方法`的零用户名”:NilClass”

该协会不应该能够为我挑选作者(用户)的full_name属性吗?我知道我在这里失去了一些东西,任何帮助非常感谢。我将在下面列出我的帖子控制器和评论控制器。 我的帖子控制器show动作:

def show 
    @post = Post.find(params[:id]) 
    @comment = @post.comments.build 
    @comments = @post.comments 
end 

这里是我的意见控制器创建操作,然后我强PARAMS:

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.build(comments_params) 
    if @comment.save 
     flash[:good] = "Your comment has been posted!" 
     redirect_to @post 
    else 
     flash[:bad] = "Sorry, your comment failed to post." 
     redirect_to @post 
    end 
end 

def comments_params 
     params.require(:comment).permit(:content, :author_id) 
    end 
+0

有人请帮帮我! – Parker

+0

我想你需要设置外键才能调用<%= comment.author.full_name%>,你有这个项目上传到github? – mrvncaragay

+0

我在github上没有它,不...我应该在哪里建立外键?我在我的用户模型中设置has_many:comments,foreign_key:“author_id” – Parker

回答

1

的错误意味着你有一个问题与关联。


速战速决是使用try

<%= comment.author.try(:full_name) %> 

这相当于... <%= comment.author.full_name if comment.author %>

-

我个人使用以下命令:

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :comments, foreign_key: :author_id 
end 

#app/models/comment.rb 
class Comment < ActiveRecord::Base 
    belongs_to :author, class_name: "User" 
end 
0

确保您的评论被索引与用户和岗位。

用户模式:

User model: class User < ActiveRecord::Base 
    has_many :posts, dependent: :destroy 
end 

Post模型

class Post < ActiveRecord::Base 
    belongs_to :user 
    has_many :comments, dependent: :destroy 
end 

评论模型

class Comment < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :author, class_name: "User", foreign_key: "user_id" 
end 

在您的观点:

<% if @comments.any? %> 
     <% @comments.each do |comment| %> 
       <p><%= comment.author.full_name %>: <%= comment.content %></p> 
     <% end %> 
<% end %>