¿Cómo puedo utilizar múltiples atributos “uno-a-muchos” anidados en form_for
-
03-10-2019 - |
Pregunta
dado el hecho de que un usuario tiene muchas tarjetas de crédito y una tarjeta de crédito tiene muchas direcciones, Estoy intentando crear un formulario que crea una tarjeta de crédito del usuario y con la dirección de todos a la vez
relavent modelo de código:
class User < ActiveRecord::Base
has_many :credit_cards
accepts_nested_attributes_for :credit_cards
end
class CreditCard < ActiveRecord::Base
has_many :addresses
accepts_nested_attributes_for :addresses
end
código del controlador
def new
@user = User.new
@user.credit_cards.build
end
código de la vista ??p>
=form_for @user, :url => users_path do |u|
=u.label :first_name, "Name"
=u.text_field :first_name
-u.fields_for :credit_cards do |cc|
=cc.label :name_on_card, "Name on Card"
=cc.text_field :name_on_card
-cc.fields_for :address do |address|
=address.label :address, "Address"
=address.text_field :address1
Así que el problema que estoy teniendo es que los campos de dirección no aparecen. He intentado añadir @user.credit_cards.addresses.build
al controlador pero me da un error de undefined method 'build' for nil
.
Solución
En el controlador, debería probar:
cc = @user.credit_cards.build
cc.adrresses.build
o
@user.credit_cards.build
@user.credit_cards.each{|cc| cc.addresses.build }
@user.credit_cards.addresses.build
no funciona porque @user.credit_cards
devuelve una matriz ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow