Рельсы Полиморфное Присвоение - PullRequest
1 голос
/ 13 февраля 2011

Я успешно создал зависимые полиморфные ассоциации, используя accepts_nested_attributes_for, но теперь я хотел бы назначить уже существующий полиморф.Я получаю сообщение об ошибке:

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 %>

Полученный хэш параметров:

Что выглядит разумным для меня.Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

Вы должны быть в состоянии добавить accepts_nested_attributes_for :address к Person и Company, что создает хэш параметров следующим образом:

{"company"=>{"company_name"=>"myCompanyName", "address_attributes"=>{"id"=>"4"}}}
1 голос
/ 13 февраля 2011

Измените f.fields_for :address do |f| на f.fields_for :address do |d| и f.collection_select на d.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 %>
...