nested_attributes的表单(has_many:mobiles)

时间:2015-01-30 05:42:04

标签: ruby-on-rails ruby-on-rails-3

联系模式

class Contact < ActiveRecord::Base
    belongs_to :phonebook
    has_many :mobiles
    accepts_nested_attributes_for :mobiles
end

移动模型

class Mobile < ActiveRecord::Base
    belongs_to :contact
end

联系人控制器

def new
    @contact = Contact.new
end

注意:

  1. 移动模型的详细信息和类型为属性。
  2. 联系人型号的名称为属性。
  3. 如何使用rails helper编写表单以为新的联系人实例生成多个移动对象?

    这是我的表格

    <h1>Create a new Contact</h1>
    <h2>Add details</h2>
    <% form_for(@contact) do |f| %>
        <%= f.error_messages %>
        <div class="field">
            <%= f.label :name %><br />
            <%= f.text_field :name %>
        </div>
        <div class="field">
            <%= f.label :mobile %><br />
            <% f.fields_for :mobile do |ff| %>
                <div>
                    <%= ff.select :type,options_for_select([["HOME", "H"], ["WORK", "W"],["OTHER", "O"]])%>
                    <%= ff.text_field :details %>
                </div>
            <% end %>
        </div>
        <div class="actions">
            <%= f.submit "Add Contact" %>
        </div>
    <% end %>
    

1 个答案:

答案 0 :(得分:1)

看看here。你需要在你的控制器中使用这样的东西:

def new
    @contact = Contact.new
    2.times { @contact.mobiles.build}
end

API docs中找到build所做的解释:

  

build(attributes = {},&amp; block)链接

     

返回已实例化的集合类型的新对象   与属性和链接到此对象,但尚未   保存。你可以传递一个属性哈希数组,这将返回一个   带有新对象的数组。

<强>更新

如果您想动态添加字段,请查看: