由于您无法使用ActiveRecord中的常规“update”和“update_attribute”方法来更新受保护的属性,以下是更新单个用户的属性的最佳方法吗?
User.update_all("admin = true","id = 1")
我猜这不属于“最佳实践”类别,所以我只是好奇是否有更合适的方式。
答案 0 :(得分:2)
最好的方法是直接设置,然后保存模型:
user = User.find(1)
user.admin = true
user.save
受保护属性的重点在于,在执行@user.update_attributes(params[:user])
之类的操作时,您不必经常担心将其过滤掉,否则可能会使非管理员成为管理员或其他内容。使用update_all
会阻止验证运行,这几乎肯定不是你想要的。
编辑:看起来这是一个迁移,所以我只想使用update_all或其他什么,而不是太担心它。迁移每个环境运行一次,然后再也不会再次运行,所以不要太过分。