Не удается получить старую вложенную форму "многие к одному" для сохранения - PullRequest
2 голосов
/ 25 января 2011

Я на Rails 3. У меня есть модель Client с address_id.В моей Client форме я вложил Address поля.Вот что такое Address часть формы:

  <%= f.fields_for @client.address do |address_form| %>
    <div class="field">
      <%= address_form.label :line1 %><br />
      <%= address_form.text_field :line1 %>
    </div>
    <div class="field">
      <%= address_form.label :line2 %><br />
      <%= address_form.text_field :line2 %>
    </div>
    <div class="field">
      <%= address_form.label :city %><br />
      <%= address_form.text_field :city %>
    </div>
    <div class="field">
      <%= address_form.label :state_id %><br />
      <%= select("client[address]", "state_id", State.all.collect {|s| [ s.name, s.id ] }) %>
    </div>
    <div class="field">
      <%= address_form.label :zip %><br />
      <%= address_form.text_field :zip %>
    </div>
  <% end %>

Когда я пытаюсь сохранить свою форму, я получаю следующее:

Address(#23652762896420) expected, got ActiveSupport::HashWithIndifferentAccess(#23652751466220)

Я не совсем понимаю, что это значитили почему я получаю это.Вот как выглядит params.inspect:

{"commit"=>"Update Client",
 "authenticity_token"=>"CBw1fQcsUtXs9x6lKTL4zeoekX1cwuFUrZvZpCShHIc=",
 "_method"=>"put",
 "utf8"=>"\342\234\223",
 "action"=>"update",
 "id"=>"16",
 "client"=>{"name"=>"Rosie O'Donnell",
            "address"=>{"city"=>"Grand Rapids",
                        "line1"=>"216 Grandville Ave SW",
                        "zip"=>"49503",
                        "line2"=>"",
                        "state_id"=>"1"},
            "phone"=>"",
            "salon_id"=>"1",
            "email"=>""},
 "controller"=>"clients"}

Может кто-нибудь сказать, что происходит?

Ответы [ 2 ]

3 голосов
/ 25 января 2011

См. Здесь: http://guides.rubyonrails.org/2_3_release_notes.html#nested-object-forms (Это статья о Rails 2.3, но она должна применяться и к Rails 3)

В вашей Client модели вам нужна эта строка:

accepts_nested_attributes_for :address

Кроме того, измените первую строку вашей вложенной формы следующим образом:

<%= f.fields_for :address do |address_form| %>

1 голос
/ 25 января 2011

Предполагая, что в вашем классе клиентов есть следующее:

accepts_nested_attributes_for :address

и

attr_accessible :address_attributes

Я бы изменил форму следующим образом:

<%= f.fields_for :address do |address_form| %>
  <div class="field">
    <%= address_form.label :line1 %><br />
    <%= address_form.text_field :line1 %>
  </div>
  <div class="field">
    <%= address_form.label :line2 %><br />
    <%= address_form.text_field :line2 %>
  </div>
  <div class="field">
    <%= address_form.label :city %><br />
    <%= address_form.text_field :city %>
  </div>
  <div class="field">
    <%= address_form.label :state_id %><br />
    <%= select("client[address]", "state_id", State.all.collect {|s| [ s.name, s.id ] }) %>       </div>
  <div class="field">
    <%= address_form.label :zip %><br />
    <%= address_form.text_field :zip %>
  </div>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...