我有一个has_many通过歌曲模型和艺术家模型之间的关联设置。 我的代码看起来是这样的Rails has_many通过避免重复
SongArtistMap型号
class SongArtistMap < ActiveRecord::Base
belongs_to :song
belongs_to :artist
end
艺术家型号
class Artist < ActiveRecord::Base
has_many :song_artist_maps
has_many :songs, :through => :song_artist_maps
validates_presence_of :name
end
宋型号
class Song < ActiveRecord::Base
has_many :song_artist_maps
has_many :artists, :through => :song_artist_maps
accepts_nested_attributes_for :artists
end
我有其中一个用户提交一首歌曲,并进入一种形式在歌曲名称和歌手艺术家。
因此,当用户提交一首歌和我的艺术家表已经没有了,我希望它创建的艺术家和设置在地图中SongArtistMap
歌曲,艺术家如果用户提交的歌曲有已经在Artists表中的艺术家我只想创建SongArtistMap,但艺术家不会重复。
当前每当用户提交一首歌曲时,我的艺术家表格中将创建一位新艺术家,即使已经存在同一个歌手并为该复制艺术家创建SongArtistMap。
有关如何解决此问题的任何想法?我觉得像铁轨可能有一些简单的小技巧来解决这已经内置。谢谢!
你知道该方法吗?你知道创建方法吗?那么,Rails有一个方法find_or_create_by_attribute!所以在你的情况下,你可以使用find_or_create_by_name。但是,由于您使用嵌套的属性... [接受嵌套属性与寻找或创造(http://stackoverflow.com/questions/3579924/accepts-nested-attributes-for-with-find-or-create) 。所以是的,这是一个重复的问题。 – Ashitaka 2012-03-30 01:39:09