我正在使用一个简单的模型进行用户授权,其中有两个ActiveRecords User
和Role
User
和Role
彼此之间存在HABTM关系。
我尝试创建一个用户界面,通过简单的复选框为用户分配角色 - 就像在Railscasts Episode #17中一样。
我的问题是,User#new
和User#update_attributes
都不使用我的表单提交的参数来更新User
对象与其角色之间的关系。 params[:user][:role_ids]
包含正确的值。但是在@user.roles
或User.new(params[:user])
之后立即调用@user.update_attributes(params[:user])
会返回一个空数组。
在@user.roles
或@user.role_ids
内手动分配User#new
或User#update_attributes
的角色,而不是“magic”。
有什么想法吗?
答案 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,了解质量分配的所有潜在问题。