首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails attr_protected

Ruby on Rails attr_protected
EN

Stack Overflow用户
提问于 2010-09-28 10:50:00
回答 4查看 3K关注 0票数 2

我的用户模型中有以下代码:

代码语言:javascript
复制
attr_protected :email

我正在尝试创建一个新的user对象,但是我得到了一个批量赋值保护的错误,代码如下。

代码语言:javascript
复制
user = User.new(
    :first_name => signup.first_name,
    :last_name => signup.last_name,
    :email => signup.email,
    :birthday => signup.birthday,
    :encrypted_password => signup.encrypted_password,
    :salt => signup.salt
  )

有谁知道我如何绕过attr_protected,让这段代码正常工作,并为电子邮件赋值?

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2010-09-28 10:50:59

代码语言:javascript
复制
user = User.new(
  :first_name => signup.first_name,
  :last_name => signup.last_name,
  :birthday => signup.birthday,
  :encrypted_password => signup.encrypted_password,
  :salt => signup.salt
)
user.email = signup.email
票数 11
EN

Stack Overflow用户

发布于 2010-09-28 12:01:16

我今天晚上刚刚写了一篇文章来解决这个问题。我计划本周晚些时候在我做完演讲后将它添加到RubyGems.org中。在此期间,请随时签出代码。http://github.com/beerlington/sudo_attributes

使用gem,您的代码将更改为:

代码语言:javascript
复制
user = User.sudo_new(
  :first_name => signup.first_name,
  :last_name => signup.last_name,
  :email => signup.email,
  :birthday => signup.birthday,
  :encrypted_password => signup.encrypted_password,
  :salt => signup.salt
)

如果要保存实例,也可以使用sudo_create()

票数 2
EN

Stack Overflow用户

发布于 2013-07-23 08:25:03

如果您知道哈希是安全的,那么update_attributes现在允许您覆盖保护,比如在内部使用时,您设置的字段不是来自用户可控制的哈希。

代码语言:javascript
复制
user = User.new({
  first_name: signup.first_name,
  last_name: signup.last_name,
  email: signup.email,
  birthday: signup.birthday,
  encrypted_password: signup.encrypted_password,
  salt: signup.salt
}, {without_protection: true})

您可能还想考虑使用roles

代码语言:javascript
复制
User.new(params, as: :admin)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3809350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档