有没有一种方法可以在不循环所有关联项的情况下实现fields_for
和has_many
关联?
我有一个与这里讨论的情况非常相似的情况:
我有一个Person
模型,有几个相关的模型(Address
、Phone number
、Jobtitle
…),在表单上我只想创建新记录。新记录应该从现有记录中预先填充。我有一个助手函数,它可以捕获正确的数据,我只想让fields_for
显示它,而不必经过do循环。
以下是您需要的:
#app/models/person.rb
class Person < ActiveRecord::Base
has_many :addresses
has_many :phone_numbers
has_many :job_titles
accepts_nested_attributes_for :addresses, :phone_numbers, :job_titles
end
#app/controllers/people_controller.rb
class PeopleController < ApplicationController
def edit
@person = Person.find params[:id]
@person.addresses.build #-> this adds onto the existing "addresses" for that person
end
end
这将允许您使用以下内容:
#app/views/people/edit.html.erb
<%= form_for @person do |f| %>
<%= f.fields_for :addresses do |a| %>
<% if a.object.new_record? %>
<%= a.text_field :street %>
<%= a.text_field :town %>
<% end %>
<% end %>
<%= f.submit %>
<% end %>
这应该只输出new
关联对象(您构建的对象)的输入。这有点麻烦,但我理解你的问题——你只想显示新的输入(现有的不应该显示)。
保存此项将向Person
对象添加关联记录。现有的将仍然存在。