Ich habe eine has_many durch Zuordnung zwischen einem Song-Modell und einem Künstlermodell. Mein Code sieht so etwas wie diesesRails has_many durch Vermeidung von Doppelarbeit
SongArtistMap Modell
class SongArtistMap < ActiveRecord::Base
belongs_to :song
belongs_to :artist
end
Artist Modell
class Artist < ActiveRecord::Base
has_many :song_artist_maps
has_many :songs, :through => :song_artist_maps
validates_presence_of :name
end
Song-Modell
class Song < ActiveRecord::Base
has_many :song_artist_maps
has_many :artists, :through => :song_artist_maps
accepts_nested_attributes_for :artists
end
ich ein Formular, in dem ein Benutzer ein Lied einreicht und tritt im Liedtitel und im Liedkünstler.
Also, wenn ein Benutzer einen Song und meine Künstler Tabelle nicht bereits den Künstler für den Song, den ich es, dass Künstler und richten Sie die Karte in SongArtistMap
erstellen möchten Wenn ein Benutzer einen Song mit einem einreicht Künstler, der bereits in der Künstler-Tabelle ist Ich möchte nur die SongArtistMap erstellt aber der Künstler nicht dupliziert.
Zur Zeit jedes Mal ein Benutzer einen Song ein neuer Künstler in meiner Künstler-Tabelle erstellt wird, selbst wenn die gleiche ist bereits vorhanden und ein SongArtistMap für diesen duplizierten Künstler erstellt.
Irgendeine Idee, wie man dieses Problem angeht? Ich habe das Gefühl, dass Rails wahrscheinlich einen einfachen kleinen Trick hat, um das bereits eingebaute zu beheben. Danke!
Sie kennen die Methode finden? Sie kennen die Methode erstellen? Nun, Rails hat eine Methode find_or_create_by_attribute! Also in Ihrem Fall könnten Sie find_or_create_by_name verwenden.Da Sie verschachtelte Attribute verwenden ... [Akzeptiert verschachtelte Attribute für Suchen oder Erstellen] (http://stackoverflow.com/questions/3579924/acceps-nested-attributes-for-with-find-or-create) . Also, das ist eine doppelte Frage. – Ashitaka