帮助坏收集的形式

时间:2014-09-18 15:18:39

标签: ruby-on-rails form-for data-collection

我正在使用form_for帮助程序在我的应用程序的客户端收集数据。然而,一些奇怪的事情正在发生。我没有收集:名称和:描述,他们都返回为零。这是我的代码:

<%= 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,在这种情况下设置为告诉视图哪种类型的attr。他们正在看。例如,这一行:

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

取决于您所使用的视图显示以太:

Group Description
or
Tag Description

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

1 个答案:

答案 0 :(得分:1)

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

如果@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通常在您在同一表单中创建多个对象时使用,例如Project和与之关联的多个任务。

希望这有帮助。

<强>更新

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

您视图中不同的独特之处在于标签定义。

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