Rails验证错误显示嵌入表单的问题

时间:2017-07-11 16:48:03

标签: ruby-on-rails ruby-on-rails-5

我有一个"项目/节目"页面显示所选项目的详细信息。在展示页面中,我有一个简单的表单,以便有人可以输入给定项目的更新和评论。一切似乎都在起作用,但出于某种原因,我无法为表单进行验证。

我想我应该说验证有效,因为没有创建注释,但错误消息不会显示。这是我的代码的主要链接:

Gist Link

关于什么是错的任何想法?

1 个答案:

答案 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