使用Rails将has_many保存为collection_select

时间:2012-03-18 18:29:29

标签: ruby-on-rails ruby-on-rails-3

我通过与我的模型的关联设置了一个has_many,我正在尝试创建一个表单,我可以在一个提交的歌曲中添加多个类型。我正在使用collection_select助手。以下是我的代码设置方式的摘要。

歌曲模型

has_many :song_genres
has_many :genres, :through => :song_genres

类型模型

has_many :song_genres
has_many :songs, :through => :song_genres

Song Genre Model

belongs_to :song
belongs_to :genre

然后在我的new.html.erb中 我有这个

collection_select :song, :genres, Genre.all, :id, :name, {:selected => 1}, {:multiple => true}

当我提交表格时,我得到了

Can't mass-assign protected attributes: genres

错误

我知道我在这里错过了一些大事。有人可以帮我解决一下如何正确设置吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试这种方式:

collection_select :song, :genre_id, Genre.all, :id, :name, {:selected => 1}, {:multiple => true}

正如Rails guide所述: “如果您使用select(或类似的帮助程序,如collection_select,select_tag)来设置belongs_to关联,则必须传递外键的名称(在上面的示例中为city_id),而不是关联名称。”