更新模型属性

时间:2011-05-16 11:32:28

标签: ruby-on-rails attr-accessible

我有一个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 切换?

2 个答案:

答案 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)