【发布时间】:2026-02-01 04:15:01
【问题描述】:
我通过歌曲模型和艺术家模型之间的关联设置有一个 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
我有一个用户提交歌曲并输入歌曲标题和歌曲艺术家的表单。
因此,当用户提交歌曲并且我的 Artists 表还没有歌曲的艺术家时,我希望它创建该艺术家并在 SongArtistMap 中设置地图
如果用户提交的歌曲的艺术家已经在 Artists 表中,我只想创建 SongArtistMap 但不复制该艺术家。
目前,每次用户提交歌曲时,都会在我的艺术家表中创建一个新艺术家,即使相同的艺术家已经存在并且为该重复的艺术家创建了 SongArtistMap。
知道如何解决这个问题吗?我觉得 Rails 可能有一些简单的小技巧来修复这个已经内置的问题。谢谢!
【问题讨论】:
-
你知道find方法吗?你知道创建的方法吗?好吧,Rails 有一个方法 find_or_create_by_attribute!因此,在您的情况下,您可以使用 find_or_create_by_name。但是,由于您使用的是嵌套属性...Accepts nested attributes for with find or create。所以是的,这是一个重复的问题。
标签: ruby-on-rails ruby-on-rails-3