没有do循环的Fields_for

时间:2015-11-09 10:22:25

标签: ruby-on-rails simple-form fields-for

有没有办法{@ 1}} fields_for关联而不循环遍历所有相关项?

我的情况与here讨论的情况非常相似:

我有一个has_many模型,有几个相关模型(PersonAddressPhone number ...),并且在表格中我只想创建新记录。 新记录应从现有记录中预先填写。我有一个帮助函数来捕获正确的数据,我只想让Jobtitle显示它而不必经过do循环。

1 个答案:

答案 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对象。现有的仍然存在。