帮助程序错误收集的表单



我正在使用form_for助手在应用程序的客户端收集数据。 然而,奇怪的事情正在发生。 我没有收集 :name 和 :d 描述,它们都返回为 nil。 这是我的代码:

<%= form_for @type do |f| %>
....
  <%= f.text_field :name, :class => "col-xs-4" %>
  <%= f.text_field :description, :class => "col-xs-4"  %>
<%= f.submit %>
....

我需要在form_for下进行fields_for才能使其正常工作吗? 这有点棘手,因为我正在使用@type在这种情况下设置为告诉视图哪种类型的吸引力。他们正在看。 例如,此行:

<%= f.label @type %> <label> Description</label>

根据您所处的视图显示以太:

Group Description
or
Tag Description

并且因为它们在技术上是相同的,所以我对两者都使用相同的索引。 我希望我清楚我的问题,并感谢任何了解我的问题和解决方案的人。

参数名称将取决于您传递的对象。

如果@type包含 Group 的实例,那么您将在 params[:group] 下获取参数,如果它是 Tag 的实例,您将在 params[:tag]

<%= form_for @type do |f| %>
  <%= f.label :name, "#{@type.model_name} Description" %>
  <%= f.text_field :name %>
  <%= f.submit %>
<% end %>

请注意标签定义。您定义它的方式将创建 2 个标签,第二个标签不会链接到任何字段。

fields_for 通常在同一表单中创建多个对象时使用,例如一个项目和与之关联的多个任务。

希望这有帮助。

更新:

如果@type是字符串或符号,它也应该有效。使用这种方法的权衡是,如果在创建对象时存在任何验证错误,则不会显示这些错误,并且字段将不会预先填充用户在提交表单之前提供的输入,从而强制用户再次输入所有信息并猜测哪个是验证错误(您可以从收到的参数初始化它, 但这会使代码可读性复杂化(

在您的视图中,唯一不同的是标签定义。

<%= f.label :name, "#{@type} Description" %>

最新更新