0

我一共有三个模型:用户、专辑和流派。用户是指艺术家(歌手、作曲家、音乐家等)。一张专辑可以有许多艺术家(用户)和许多流派。一个艺术家可以为许多专辑作曲/唱歌。总之我有以下模型和控制器动作。我在数据库中创建了两个 HABTM 关系:albums_genres 和 users_albums。

//User model
class User < ActiveRecord::Base
   has_and_belongs_to_many :albums
end

//Album model
class Album < ActiveRecord::Base
   has_and_belongs_to_many :genres
   has_and_belongs_to_many :users
end

//Genre model
 class Genre < ActiveRecord::Base
    has_and_belongs_to_many :albums
 end

//albumController create method
def create
  @user = current_user
  @album = @user.albums.new(params[:album])
  if @album.save
     ...
  end
end

当我按如下方式发送数据时,数据会正确插入到 Albums_users 中。

"Album"=>{"title"=>"Test album", "description"=>"test description"

但是我也想将数据插入到 albums_genres 表中。为此,我的参数数据如下所示:

"Album"=>{"title"=>"Test album", "description"=>"test description", "genre_ids"=>["1", "2", "3"]}

然后我得到一个错误Can't mass-assign protected attributes: Genre_ids。它试图将数据插入到专辑表中,我认为应该将genre_ids 插入到相册_genres 中。所以我的问题是我需要如何编写控制器代码?编写控制器和/或模型代码的更好方法受到高度赞赏。先感谢您!参考资料来自:http ://railscasts.com/episodes/17-habtm-checkboxes

4

1 回答 1

0

您必须向genre_ids您添加大量可分配属性:

attr_accessible :genre_ids

然后您的数据在 中创建记录albums_genres

在你的Album你得到集合genresgenre_ids. 第一个包含一个Genre对象数组,第二个包含一个id类型的数组。
您可以添加或分配给这两个数组,以管理关联。
批量分配只是设置genre_ids但需要明确许可(批量分配限制)。

于 2013-07-21T12:31:13.153 回答