ActiveRecord无法更新HABTM关系
我使用一个简单的模型进行用户授权,使用两个ActiveRecords User
和Role
User
和Role
彼此之间具有HABTM关系。
我尝试创建一个用户界面,通过简单的复选框为用户分配角色 – 就像在Railscasts第17集中一样。
我的问题是User#new
和User#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#new
或User#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 ,了解质量分配的所有潜在问题。
- ActiveRecord create:传入属性数组
- ActiveRecord:返回对象时隐藏列
- Rails应用程序错误 – ActiveRecord :: PendingMigrationError正在等待迁移; 运行’rake db:migrate RAILS_ENV = development’来解决此问题
- 棘手的活跃记录关系 – 多态双向自我指涉
- 将ActiveRecord对象与Rspec进行比较
- Ruby on Rails:如何生成应用程序范围的序列?
- 我可以通过activerecord关系创建activerecord关联(使用祖先gem时)吗?
- Rails模型“before_filter”?
- 在Rails ActiveRecord中分配给布尔字段时如何转换值?