代码之家  ›  专栏  ›  技术社区  ›  Nikita Rybak

混淆接受\u嵌套的\u属性\u

  •  1
  • Nikita Rybak  · 技术社区  · 14 年前

    不知怎么的,我觉得 accepts_nested_attributes_for 将允许我通过父对象填充子对象:

    person.update_attributes person_hash
    

    person.address.update_attributes person_hash[:address]
    person_hash.delete :address
    person.update_attributes person_hash
    

    现在, http://guides.rubyonrails.org 提到只间接地接受\u嵌套的\u属性\u,这个方法的API文档也相当神秘。

    更新
    模型,为了清楚起见

    class Person < ActiveRecord::Base
      has_one :address
      accepts_nested_attributes_for :address
    end
    

    更新2

    <% fields_for "people", person, :index => person.id do |person_form| %>
      ... 
      <% person_form.fields_for person.address do |address_form| %>
        <%= address_form.text_field :street %>
      <% end %>
      ...
    <% end %>
    

    但它给我的html名称像 people[66][address][street] 而不是 people[66][address_attributes][street]

    1 回复  |  直到 14 年前
        1
  •  3
  •   Ju Nogueira    14 年前

    accepts_nested_attributes_for

    # example from railsapi.com
    # view
    <% form_for @person, :url => { :action => "create" } do |person_form| %>
       Name: <%= person_form.text_field :name %>
       ...
       <% person_form.fields_for :address do |address_fields| %>
         Street  : <%= address_fields.text_field :street %>
         Zip code: <%= address_fields.text_field :zip_code %>
       <% end %>
    <% end %>
    

    这样,您的参数将如下所示

    params = { 
       :person => { 
          :name => 'Jack',
          :address_attributes => { :street => 'Street', :zip_code => '11111' } 
       }
    }
    

    @person = Person.create(params)
    

    更多信息, railsapi.com

    编辑

    我不知道为什么你的情人会这样:/ 但是使用

    #person.address.update_attributes person_hash.delete(:address) OR
    person.address.update_attributes person_hash[:address]
    person_hash.delete :address
    
    person.update_attributes person_hash
    

    不是 错误的 . 只是可以做得更多 优雅的 密码,就像你说的。