【发布时间】:2013-07-21 12:22:38
【问题描述】:
我共有三个模型:用户、专辑和流派。用户是指艺术家(歌手、作曲家、音乐家等)。一张专辑可以有许多艺术家(用户)和许多流派。一个艺术家可以为许多专辑作曲/唱歌。总之我有以下模型和控制器动作。 我在 db 中创建了两个 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
当我按如下方式发送数据时,数据会正确插入到相册_用户中。
"Album"=>{"title"=>"Test album", "description"=>"test description"
但是,我也想将数据插入到 albums_genres 表中。为此,我的参数数据如下所示:
"Album"=>{"title"=>"Test album", "description"=>"test description", "genre_ids"=>["1", "2", "3"]}
然后我收到一个错误无法批量分配受保护的属性:genre_ids。它试图将数据插入到专辑表中,我认为应该将genre_ids 插入到相册_genres 中。所以我的问题是我需要如何编写控制器代码?编写控制器和/或模型代码的更好方法受到高度赞赏。先感谢您!参考摘自:http://railscasts.com/episodes/17-habtm-checkboxes
【问题讨论】:
-
第一个参数数据粘贴错误?我看不到对用户的引用。
-
有:
@user = current_user。当我写成@album = current_user.albums.new(params[:album])时它不起作用。所以我不得不这样改变。
标签: ruby-on-rails ruby ruby-on-rails-3 many-to-many has-and-belongs-to-many