我正在尝试关注Jumpstart Labs Rails-Blogger Tutorial,我正在尝试为所创建的文章添加评论。
以下是我create
评论时的代码:
def create
@comment = Comment.create!(comment_params)
flash.notice = "Your comment was created successfully!"
redirect_to article_path(@comment.article_id)
end
def comment_params
article_id = params[:article_id]
params.require(:comment).permit(:author_name, :body)
end
当我在文章页面上,并尝试通过我的评论表单提交评论时,我收到此错误:
No route matches {:action=>"show", :controller=>"articles", :id=>nil} missing required keys: [:id]
我意识到它无法找到与我的评论相关联的article_id
,但我找不到我的错误。显然没有在我的article_id
方法中正确设置comment_params
属性,我的问题是为什么它会给article_id
一个零值?
请注意我也尝试过:
@comment.article_id = params[:article_id]
:article_id = params[:article_id]
这些都不起作用。我曾尝试以多种方式将article_id
作为符号,但它仍然给它一个零值。
修改
我认为包含它可能是有用的。以下是教程要做的事情:
def create
@comment = Comment.new(comment_params)
@comment.article_id = params[:article_id]
@comment.save
redirect_to article_path(@comment.article)
end
def comment_params
params.require(:comment).permit(:author_name, :body)
end
但是,我想使用.create
方法,这样它只使用一行。我的问题是当我尝试设置评论article_id
时。这就是失败的地方,我不知道如何使用article_id
方法设置.create
,因为它会自动保存评论。
第二次编辑
以下是用于创建评论的表单:
<h3>Post a Comment</h3>
<%= form_for [ @article, @comment ] do |f| %>
<p>
<%= f.label :author_name, "Your name" %>
<br/>
<%= f.text_field :author_name %>
</p>
<p>
<%= f.label :body, "Your comment" %>
<br/>
<%= f.text_area :body %>
</p>
<p>
<%= f.submit 'Submit' %>
</p>
<% end %>
第三次编辑
这是我的错误图片。请注意,它底部有一个带有正确article_id的哈希值,但它会为article_id指定一个nil值。
答案 0 :(得分:0)
您的article_id
似乎为零。
首先,您的comment_params
方法应该是这样的:
def comment_params
params.require(:comment).permit(:author_name, :body, :article_id)
end
如果您不允许:article_id
,它将被过滤掉并设置为nil。我怀疑这是发生了什么。
如果这不起作用,请确保您实际传递了参数中的article_id
(检查服务器日志)。我想它可能在一个隐藏的领域或按钮params吗?
答案 1 :(得分:0)
添加
@comment.article_id = params[:comment][:article_id]
或者只需将article_id
添加到您允许的参数中:
params.require(:comment).permit(:author_name, :body, :article_id)
并确保从视图中正确发送。