Comment utiliser l'attribut accepts_nested_attributes_for d'ActiveRecord dans une association has_many: through en ajoutant des attributs à la table de jointure?accepte_nested_attributes_for via la table de jointure avec des attributs sur la jointure
Par exemple, supposons que j'ai un modèle d'équipe:
class Team < ActiveRecord::Base
role = Role.find_by_name('player')
has_many :players,
:through => :interactions,
:source => :user,
:conditions => ["interactions.role_id = ?", role.id] do
class_eval do
define_method("<<") do |r|
Interaction.send(:with_scope, :create => {:role_id => role.id}) { self.concat r }
end
end
end
end
L'équipe has_many players
par interactions
, car un utilisateur peut occuper plusieurs rôles (joueur, gestionnaire, etc.).
Comment puis-je utiliser accept_nested_attributes_for tout en ajoutant des attributs à la table de jointure?
Si j'ai un record d'équipe existante team
et un enregistrement d'utilisateur existant user
, je peux faire quelque chose comme ceci:
team.players << user
team.players.size
=> 1
Mais si je crée une nouvelle équipe avec un joueur imbriqué:
team = Team.create(:name => "New York Lions",
:players_attributes => [{:name => 'John Doe'}])
team.players.size
=> 0
Dans ce dernier exemple, les enregistrements d'équipe, d'utilisateur et d'interaction sont créés (et l'interaction de l'utilisateur est assurée par l'utilisateur), mais l'attribut interactions.role_id n'est pas défini ici.
Avez-vous déjà résolu ce problème? –
la réponse à votre question peut être trouvée dans cet article: http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through-how-to-edit-attributes-of-join -modèle –