recursos rails formularios anidados ruby-on-rails ruby nested-forms

ruby-on-rails - anidados - rails formularios



Formas anidadas en rieles: atributo de acceso en relaciĆ³n has_many (4)

Debes ver el Formulario Modelo Anidado de RailsCasts .
Gracias Ryan Bates gran trabajo.

Tengo un usuario y un modelo de perfil. Un usuario puede tener muchos perfiles. Necesito acceder solo a una información de la sección de perfiles (a saber, el número de teléfono) en mi modelo de usuario durante el proceso de creación del usuario. Por lo tanto, estoy tratando de hacerlo a través de attr_accessible . Mi user.rb se parece a esto.

has_many :profiles attr_accessible :handle, :email, :password, :profile_mobile_number attr_accessor : :profile_mobile_number

El problema al que me estoy enfrentando es que cuando trato de llamar al método getter profile_mobile_number en un método en user.rb (el método es privado, aunque creo que no importa), obtengo un valor nulo. Uso lo siguiente en mi formulario de usuarios / new.html.erb

Mi pregunta es ¿cuál es la forma correcta de hacer esto? ¿Debo usar <% f.fields_for :profile do |ff| -%> <% f.fields_for :profile do |ff| -%> o <% f.fields_for :profiles do |ff| -%> <% f.fields_for :profiles do |ff| -%> (note que el segundo es plural). Cuando uso el plural: perfiles, ni siquiera veo los campos en el formulario. ¿Que me estoy perdiendo aqui? ¿Y cuál es el tiempo que debe usarse en el modelo user.rb? : profile_phone_number o: profiles_phone_number? Gracias.


Podrías hacer algo como lo siguiente:

<% form_for @user, :url => { :action => "update" } do |user_form| %> ... <% user_form.fields_for :profiles do |profiles_fields| %> Phone Number: <%= profiles_fields.text_field :profile_mobile_number %> <% end %> <% end %>

Pero como ya tienes una asociación, entonces también puedes usar '' accepts_nested_attributes_for ''


Puedes usar '' accepts_nested_attributes_for '' para hacer esto; Pero hay un pequeño truco en las formas:

Debe usar el singular, y llamar a fields_for para cada perfil, como esto:

<% form_for @user do |f| -%> <% @user.profiles.each do %> <% f.fields_for :profile_attributes, profile do |ff| -%> <% end %>

Observe que es : profile_attributes , en lugar de solo : perfil .