我正在使用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" %>