有没有办法{@ 1}} fields_for
关联而不循环遍历所有相关项?
我的情况与here讨论的情况非常相似:
我有一个has_many
模型,有几个相关模型(Person
,Address
,Phone number
...),并且在表格中我只想创建新记录。
新记录应从现有记录中预先填写。我有一个帮助函数来捕获正确的数据,我只想让Jobtitle
显示它而不必经过do循环。
答案 0 :(得分:2)
以下是您的需求:
#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
关联对象(您构建的对象)的输入。这有点hacky,但我遇到了你的问题 - 你只想要显示新的输入(现有的输入不应该显示)。
保存此项将将关联记录添加到Person
对象。现有的仍然存在。