嵌套模型和表单在Rails中具有一个直通关系

我正在尝试设置一个包含一些歌曲信息的表单。 现在是歌曲名称和歌曲艺术家。

到目前为止,这是我的一些代码。

歌曲模型*编辑

class Song  :song_artist_map accepts_nested_attributes_for :artist end 

艺术家模型

 class Artist  :song_artist_maps end 

SongArtistMap模型

 class SongArtistMap < ActiveRecord::Base belongs_to :song belongs_to :artist end 

歌曲控制器

 def new @song = Song.new @song.artist.build end 

在我的表单中,我添加了这段代码

  
  • 现在我的表格中没有任何东西出现在艺术家身上。

    因此,我需要一种方法,可以在添加歌曲时从表单添加艺术家,然后进行映射,或者如果艺术家已存在于我的数据库中,则只进行映射。

    我知道我在这里做错了什么,有人可以帮忙吗? 谢谢!

    在你的歌曲模型中,它应该是has_many:艺术家?

    如果你这样做

     "artist".pluralize => "artists" 

    这就是Rails用于自动查找一些东西的东西,特别是对于has_many关系,所以它可能是你问题的根源。

    编辑

    在这种情况下,问题出在您的控制器中。 而不是@ song.artist.build,你应该有@ song.build_artist。

    使用has_many关系,Rails使用一个允许你实例化新的对象的对象,使用has_one,它只返回它(可以是nil。)。