form_for Model.new" f.error_messages"

时间:2015-04-15 12:37:08

标签: ruby-on-rails ruby-on-rails-4

f.error_messages表单构建器帮助程序已在Rails 3中折旧。

如何获取包含开始标记的表单的错误消息:

<%= form_for Model.new %>

(我正在使用Model.new,因为我希望能够将未定义的多个这些表单加载到一个页面上)

2 个答案:

答案 0 :(得分:1)

你不能。不使用像这样的表单构建器。

基本上,错误消息存储在内部用于构建表单的对象中。如果你每次都建立一个新的,你会得到一个没有错误的干净对象。

您需要做的是在请求之间保留用户填写的对象。通常,这是通过在控制器中创建新对象来完成的:

@model = Model.new

这个的本质是,new视图使用@model来呈现表单。而诀窍是有可能在同样提供@model的其他操作中呈现相同的视图。也就是说,如果你在create中做了类似的事情:

@model = Model.new(model_params)
if @model.save
  # success
else
  render :new
end

它可以呈现new视图,因为它也会分配@model;在这种情况下,它将包含消息和其他内容的错误。所有这些都在@model.errors内 - 在new操作中始终为空。

多种形式并没有那么不同,请记住,您始终只提交一种形式。您可以切换到渲染表单数组,在这种情况下,您可以使用@models数组:

@models = [form1, form2, form3]

在这种情况下,如果保存失败,请再次分配该数组并替换用户尝试填写的表单(如果您可以识别它),或者将该表单附加/附加到该数组中。

@models[index_of_submitted_form] = form_from_user #replace
@models << form_from_user # append
@models.unshift form_from_user # prepend

答案 1 :(得分:0)

在Rails 3中,您可以使用@model.errors

访问错误
<%= form_for @model = Model.new do |f| %>
  <% @model.errors.full_messages.each do |msg| %>
    <p><%= msg %></p>
  <% end %>

  # ...
  # ...
  # ...
<% end %>