Rails 2.3.5 испытывает проблемы с form_for и fields_for - PullRequest
0 голосов
/ 26 сентября 2011

Я пытаюсь добавить адреса в модель пользователя с помощью отправки формы, но у меня возникли проблемы. Пользователь:

class User < ActiveRecord::Base 
  has_many :addresses 
end

может добавить адрес к своей учетной записи через страницу учетных записей, которая контролируется контроллером учетных записей.

class AccountsController < ApplicationController
   def addresses
       @user = current_user
       @addresses = @user.addresses
       default_country = Country.find Spree::Config[:default_country_id]
       @countries = Checkout.countries.sort
       @states = default_country.states.sort
   end
 end

В представлении "/ account / address" у меня есть форма, которую я пытаюсь отправить:

<% form_for @user do |user_form| %>
    <% user_form.fields_for :address do |address_form| %>
            <%= address_form.text_field :firstname, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :lastname, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :business_name, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :address1, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :address2, :value=>"" %>
            <%= address_form.text_field :city, :class => 'required', :value=>"" -%>
            ...
        <%= address_form.submit %>
    <% end -%>
<% end %>

Я смотрю на код поля «один ко многим» здесь:

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

но проблема в том, что у меня несколько адресов, но я хочу отправить только один адрес за раз. Что мне нужно добавить к модели пользователя / адреса и / или контроллера учетных записей, чтобы я мог успешно создать адрес и добавить его в модель пользователя при отправке этой формы? Если есть более простой способ сделать это, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 26 сентября 2011

Вам нужно accepts_nested_attributes_for

class User < ActiveRecord::Base 
  has_many :addresses 
  accepts_nested_attributes_for :addresses
end

И ваша форма может быть

<% form_for @user do |user_form| %>
    <% user_form.fields_for :addresses do |address_form| %>
            <%= address_form.text_field :firstname, :class => 'required' -%>
            <%= address_form.text_field :lastname, :class => 'required' -%>
            <%= address_form.text_field :business_name, :class => 'required' -%>
            <%= address_form.text_field :address1, :class => 'required' -%>
            <%= address_form.text_field :address2 %>
            <%= address_form.text_field :city, :class => 'required' -%>
            ...
        <%= address_form.submit %>
    <% end -%>
<% end %>

Это позволит вам редактировать все существующие адреса, если вам нужно добавить 1 в список,вы можете

@user.addresses.build в вашем действии контроллера заполнить пустое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...