我有三种模型:用户模型,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
有人请帮帮我! – Parker
我想你需要设置外键才能调用<%= comment.author.full_name%>,你有这个项目上传到github? – mrvncaragay
我在github上没有它,不...我应该在哪里建立外键?我在我的用户模型中设置has_many:comments,foreign_key:“author_id” – Parker