2011-02-13 56 views
1

我已经成功地创建了依赖多态关联使用accepts_nested_attributes_for,但现在我想分配一个已经存在的多态。我发现了错误:Rails多态分配

undefined method `id' for {"id"=>"4"}:ActiveSupport::HashWithIndifferentAccess 

型号:

class Person < ActiveRecord::Base 
    has_one :address, :as => :addressable 
end 

class Company < ActiveRecord::Base 
    has_one :address, :as => :addressable 
end 

class Address < ActiveRecord::Base 
    belongs_to :addressable, :polymorphic => true 
end 

查看:

<%= form_for @company do |f| %> 
    <p> 
    <%= f.label :company_name %><br /> 
    <%= f.text_field :company_name %> 
    </p> 

    <%= f.fields_for :address do |f| %> 
    <div class="field"> 
     <%= f.collection_select :id, Address.all, :id, :description, {:prompt => "-Select Address"} %> 
    </div> 
    <% end %> 

产生的PARAMS哈希:

"company"=>{"company_name"=>"myCompanyName", "address"=>{"id"=>"4"}} 

它看起来合理的,我。我究竟做错了什么?

回答

1

变化f.fields_for :address do |f|f.fields_for :address do |d|f.collection_selectd.collection_select如果没有输错

<%= form_for @company do |f| %> 
    <p> 
    <%= f.label :company_name %><br /> 
    <%= f.text_field :company_name %> 
    </p> 

    <%= f.fields_for :address do |d| %> 
    <div class="field"> 
     <%= d.collection_select :id, Address.all, :id, :description, {:prompt => "-Select Address"} %> 
    </div> 
    <% end %> 
<% end %> 
+0

尝试了你的建议。同样的错误。在这种情况下,我的params散列应该是什么样子? – SooDesuNe 2011-02-13 22:27:14

1

你应该能够添加accepts_nested_attributes_for :addressPersonCompany,产生params散列,像这样:

{"company"=>{"company_name"=>"myCompanyName", "address_attributes"=>{"id"=>"4"}}}