ActiveRecord无法更新HABTM关系

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

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

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

使用@user.roles@user.role_ids手动分配角色,但不是User#newUser#update_attributes“魔术”

有任何想法吗?

您在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 ,了解质量分配的所有潜在问题。