我试图通过提交表单为每个评论更新一个简单的按钮。这是我的查看代码:
<% @comments.each do |comment| %>
<%= form_for comment, url: article_comment_path(comment.article, comment), method: :patch do |f| %>
<%= hidden_field_tag :update_time, Time.now %>
<%= f.submit "Confirm" %>
<% end %>
<% end %>
评论控制器更新操作代码:
def update
@article = Article.friendly.find(params[:article_id])
@comment = @user.comments.find(params[:id])
if @comment.update(comment_params)
redirect_to @comments
else
render article_comments_path(@article)
end
end
private
def comment_params
params.require(:comment).permit(:date, :note)
end
根据上面的代码,我收到此错误:
param丢失或值为空:评论 - 错误突出显示私有声明中的params.require行
答案 0 :(得分:0)
您的问题非常简单,查看您的表单,您没有任何:note
因此当您尝试在params哈希中要求:note
时,您会收到该错误,因为没有{ {1}}键入你的参数哈希,为了解决这个问题,你有两个选择:
创建另一个params方法并有条件地使用它:
:note
然后在private
def comment_params
params.require(:comment).permit(:date, :note)
end
def comment_params_minimal
params.require(:comment).permit(:date)
end
操作中有条件地使用它:
update
def update
@article = Article.friendly.find(params[:article_id])
@comment = @user.comments.find(params[:id])
if params[:comment][:note].present?
use_this_params = comment_params
else
use_this_params = comment_params_minimal
end
if @comment.update(use_this_params)
redirect_to @comments
else
render article_comments_path(@article)
end
end
哈希直接更新您的评论,而不是将其params
列入白名单,以便以正常方式更新comment_params
,仅更新if params[:comment][:note].present?
直接属性:date
希望这会对你有所帮助。
答案 1 :(得分:-1)
您正在提交文章评论路径,但您的表单适用于文章(例如您的代码&lt;%= form_for文章)而不是评论。因此,你应该首先寻找的参数是文章params [:article]。我想如果你把调试器放在这个
def update
debugger #<<<<<<<<<
@article = Article.friendly.find(params[:article_id])
@comment = @user.comments.find(params[:id])
if @comment.update(comment_params)
redirect_to @comments
else
render article_comments_path(@article)
end
end
然后,您可以检查提交给控制器更新操作的参数。很可能你会在你的文章中找到你的评论参数,例如
params[:article][:comment]
但我只是在这里猜测。使用调试器和服务器日志,您可以准确地检查提交给更新操作的参数。