从Rails表单中获取数组
我需要为account
资源设计一个表单。 在那种forms中,我需要在属性称为relationships
的params
散列中收集一些id作为数组。
所以来自POST请求的最终params[account]
哈希应该是这样的:
{:name => 'somename', :relationships => ["123", "23", "23445"]}
我该如何设计form_for
字段? 我尝试了这个,但没有奏效:
p.id %>
@eligible_parents
的元素数量每次都不同。
relationships
既不是关联,也不是account
模型中的属性。
我必须使用虚拟属性,但我需要从表单填写一个数组。
请帮忙。 我怎样才能做到这一点?
您仍然需要在视图中使用fields_for
,只需使用:relationships
作为record_name
然后提供一个对象。
<%= form_for @account do |f| %> <%= f.text_field :name %> <% fields_for :relationships, @eligible_parents do |p| %> <%= p.check_box "relationships", nil, :value => p.object.id %> <%= p.object.name %>
<% end %> <%= f.submit "Submit" %> <% end %>
这里的文档: ActionView :: Helpers :: FormHelper
我发现这是最干净的方式……
如果您正在处理直接数据并希望在不使用任何@objects的情况下发回数组:
<%= form_for :team do |t| %> <%= t.fields_for 'people[]', [] do |p| %> First Name: <%= p.text_field :first_name %> Last Name: <%= p.text_field :last_name %> <% end %> <% end %>
你的params数据应该像这样返回:
"team" => { "people" => [ {"first_name" => "Michael", "last_name" => "Jordan"}, {"first_name" => "Steve", "last_name" => "Jobs"}, {"first_name" => "Barack", "last_name" => "Obama"} ] }
如果要发送值数组,只需在名称属性中使用[]。在您的情况下,只需使用
<%= f.check_box "relationships", {}, :value => p.id, :name => "relationships[]" %>