我有一个Rails应用程序是一个博客平台,允许多个贡献作者。我的用户模型具有:writer 布尔属性,用于分配写入权限。但是,对于用户模型,:writer 未列在 attr_accessible 下。
我想通过网络编辑此属性,而无需运行
User.find_by_id(user_id).update_attribute(:writer, true/false)
通过控制台,但我想知道如果没有在用户模型的 attr_accessible 下列出:writer ,这是不可能的。我有几个页面只能供管理员用户访问,我希望能够在这些视图中切换:writer 属性。
如果确实有可能,怎么办呢?在此先感谢您的帮助!
编辑:根据我得到的几个答案,我觉得应该在我的问题中更加具体。我道歉。据我所知,我仍然可以单独更新:writer 属性,正如Beerlington和Hitesh指出的那样。我想知道的是如何通过视图实现这样的功能。是否可以创建一个可点击的链接来切换:writer状态?可能有一个链接调用控制器函数并传递适当的 user_id :writer 切换?
答案 0 :(得分:7)
attr_accessible和attr_protected仅保护mass-assignment的属性。您仍然可以通过其他方式分配它们:
批量作业(不起作用):
model.update_attributes(:admin => true)
非质量分配(选项1):
model.admin = boolean
model.save
非质量分配(选项2):
model.send(:attributes=, attributes, false)
非质量分配(选项3):
model.update_attribute(admin, boolean)
我个人不喜欢这些手动选项中的任何一个,所以我写了一个名为sudo_attributes的宝石,它可以更容易地使用“sudo”方法覆盖质量分配。
答案 1 :(得分:1)
使用此
User.find_by_id(user_id).update_attribute(:writer, true) or
User.find_by_id(user_id).update_attribute(:writer, false)