我有一个"项目/节目"页面显示所选项目的详细信息。在展示页面中,我有一个简单的表单,以便有人可以输入给定项目的更新和评论。一切似乎都在起作用,但出于某种原因,我无法为表单进行验证。
我想我应该说验证有效,因为没有创建注释,但错误消息不会显示。这是我的代码的主要链接:
关于什么是错的任何想法?
答案 0 :(得分:1)
问题#1
在这一行:
<%= form_for([@project, @project.comments.build]) do |f| %>
...您每次都在构建一个全新的评论,无论这是表单的初始调用,还是在提交无效之后。此新评论没有@comment
的错误。
请改为尝试:
<%= form_for([@project, @comment || @project.comments.build]) do |f| %>
在new
操作中,@comment
将为nil
,因此将构建新评论。在create
操作中,@comment
已经存在,因此它将用于显示错误并重新填充表单。
替代方案(也许更清洁):
# in the controller
def new
@comment = @project.comments.build
end
# in the template
<%= form_for([@project, @comment]) do |f| %>
问题#2
即使出现错误,您也始终会重定向远离create
操作。相反,您可以再次重新呈现show
模板:
if @comment.save
redirect_to project_path(@project), notice: 'Comment was successfully created.'
else
render "projects/show"
end