Wie kann ich den accepts_nested_attributes_for-Helper von ActiveRecord in einer has_many :through-Assoziation verwenden, während ich Attribute zur Join-Tabelle hinzufüge?
Nehmen wir zum Beispiel an, ich habe ein Team-Modell:
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
Das Team hat_viele players
を通して interactions
weil ein Benutzer mehrere Rollen einnehmen kann (Spieler, Manager usw.).
Wie kann ich accepts_nested_attributes_for verwenden und gleichzeitig Attribute zur Join-Tabelle hinzufügen?
Wenn ich einen bestehenden Team-Datensatz habe team
und einen bestehenden Benutzerdatensatz user
kann ich so etwas tun:
team.players << user
team.players.size
=> 1
Aber wenn ich ein neues Team mit einem verschachtelten Spieler erstelle:
team = Team.create(:name => "New York Lions",
:players_attributes => [{:name => 'John Doe'}])
team.players.size
=> 0
In diesem letzten Beispiel werden die Team-, Benutzer- und Interaktionsdatensätze erstellt (und das Team hat den Benutzer durch Interaktionen), aber das Attribut interactions.role_id ist hier nicht gesetzt.