6

我有一个 Rails 应用程序,它是一个博客平台,允许多个投稿作者。我的用户模型有一个:writer布尔属性,用于分配写入权限。但是,:writer未在用户模型的attr_accessible 下列出。

我想要一种通过网络编辑此属性的方法,而无需运行

User.find_by_id(user_id).update_attribute(:writer, true/false)

通过控制台,但我想知道如果没有在用户模型的attr_accessible 下列出:writer ,这是否是不可能的。我有几个页面仅供管理员用户访问,我希望能够在这些视图中切换:writer属性。

如果确实有可能,怎么可能做到?在此先感谢您的帮助!

编辑:根据我得到的几个答案,我觉得我的问题应该更具体。我道歉。我知道我仍然可以单独更新:writer属性,正如 Beerlington 和 Hitesh 所指出的那样。我想知道的是如何通过视图实现这样的功能。是否可以制作一个可点击的链接来切换 :writer 状态?是否有可能让链接调用控制器函数并为:writer切换传递适当的user_id ?

4

2 回答 2

8

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的 gem ,它可以更轻松地使用“sudo”方法覆盖质量分配。

于 2011-05-16T11:57:06.607 回答
1

用这个

User.find_by_id(user_id).update_attribute(:writer, true) or 
User.find_by_id(user_id).update_attribute(:writer, false)
于 2011-05-16T11:55:55.240 回答