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

=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.

¿Fue útil?

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
scroll top