在迁移中使用update_all更新受保护的属性

时间:2010-06-11 00:43:51

标签: ruby-on-rails ruby activerecord

由于您无法使用ActiveRecord中的常规“update”和“update_attribute”方法来更新受保护的属性,以下是更新单个用户的属性的最佳方法吗?

  User.update_all("admin = true","id = 1")

我猜这不属于“最佳实践”类别,所以我只是好奇是否有更合适的方式。

1 个答案:

答案 0 :(得分:2)

最好的方法是直接设置,然后保存模型:

user = User.find(1)
user.admin = true
user.save

受保护属性的重点在于,在执行@user.update_attributes(params[:user])之类的操作时,您不必经常担心将其过滤掉,否则可能会使非管理员成为管理员或其他内容。使用update_all会阻止验证运行,这几乎肯定不是你想要的。

编辑:看起来这是一个迁移,所以我只想使用update_all或其他什么,而不是太担心它。迁移每个环境运行一次,然后再也不会再次运行,所以不要太过分。