étant donné qu'un utilisateur a beaucoup de cartes de crédit et qu'une carte de crédit a beaucoup d'adresses, j'essaye de créer un formulaire qui crée un utilisateur et un crédit carte avec adresse à la foisComment j'utilise plusieurs attributs imbriqués "un-à-plusieurs" dans form_for
code modèle relavent:
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
code du contrôleur
def new
@user = User.new
@user.credit_cards.build
end
code de la vue
=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
Donc le problème que j'ai est que les champs d'adresse n'apparaissent pas. J'ai essayé d'ajouter @user.credit_cards.addresses.build
au contrôleur mais j'obtiens une erreur undefined method 'build' for nil
.
parfait, merci pour le Reponse rapide! –
Je viens de corriger une erreur que j'ai faite, c'est @ user.credit_cards.build @ user.credit_cards.each {| cc | cc.addresses.build} et non @ user.credit_cards @ user.credit_cards.each {| cc | cc.addresses.build} – Yannis