ActiveRecord无法更新HABTM关系

时间:2009-04-16 11:47:46

标签: ruby-on-rails activerecord has-and-belongs-to-many

我正在使用一个简单的模型进行用户授权,其中有两个ActiveRecords UserRole UserRole彼此之间存在HABTM关系。

我尝试创建一个用户界面,通过简单的复选框为用户分配角色 - 就像在Railscasts Episode #17中一样。

我的问题是,User#newUser#update_attributes都不使用我的表单提交的参数来更新User对象与其角色之间的关系。 params[:user][:role_ids]包含正确的值。但是在@user.rolesUser.new(params[:user])之后立即调用@user.update_attributes(params[:user])会返回一个空数组。

@user.roles@user.role_ids内手动分配User#newUser#update_attributes的角色,而不是“magic”

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

您的User模型中有attr_accessible或attr_protected调用的可能性很高,因此可以保护role_ids免受大规模分配。

如果您真的想通过质量赋值运算符更新角色,只需添加

即可
attr_accessible :role_ids

到你的模特。但是,我建议您首先阅读http://railspikes.com/2008/9/22/is-your-rails-application-safe-from-mass-assignment,了解质量分配的所有潜在问题。