我怎样才能通过使用fields_for的对象数组(所有同型号)迭代? 该阵列包含由CURRENT_USER创建的对象。
我目前有:
<%= f.fields_for :descriptionsbyuser do |description_form| %>
<p class="fields">
<%= description_form.text_area :entry, :rows => 3 %>
<%= description_form.link_to_remove "Remove this description" %>
<%= description_form.hidden_field :user_id, :value => current_user.id %>
</p>
<% end %>
但我想,以取代:descriptionsbyuser与我在控制器中创建一个数组 - @descriptionsFromCurrentUser
这也是内部瑞安贝特的“nested_form_for”
任何指针将不胜感激!
亚当
对于文档fields_for
清楚地表明您使用数组的方式:
或者集合使用:
<%= form_for @person do |person_form| %> ... <%= person_form.fields_for :projects, @active_projects do |project_fields| %> Name: <%= project_fields.text_field :name %> <% end %> ... <% end %>
@active_projects
这里是你的阵列。
要使用集合fields_for
和它的工作,你所期望的方式,模型需要接受集合嵌套属性。 如果集合是ActiveRecord
一个一对多的关系,使用accepts_nested_attributes_for
类宏。 如果集合不是ActiveRecord
一个一对多的关系,你需要实现一个集合的getter和属性的集合制定者。
如果它是一个ActiveRecord
关系:
class Person
has_many :projects
# this creates the projects_attributes= method
accepts_nested_attributes_for :projects
end
如果它是一个非ActiveRecord
关系:
class Person
def projects
...
end
def projects_attributes=(attributes)
...
end
end
无论哪种方式,形式是一样的:
<%= form_for @person do |f| %>
...
<%= f.fields_for :projects, @active_projects do |f| %>
Name: <%= f.text_field :name %>
<% end %>
...
<% end %>
我发现这是最彻底的方法
如果您正在使用直线数据工作,并要发送回一个数组,而不使用任何这些@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"}
]
}
一个除了barelyknown的回答(是不是能够作为注释添加由于信誉分) -
对于非ActiveRecord的情况下,我也必须定义persisted?
我除了上课*_attributes=(attributes)
。