对于我正在从事的 Rails 项目,用户模型中的大部分信息都是保密的,例如双因素身份验证电话号码。
我只将模型中的基础知识、email
、password
和password_confirmation
列入白名单。
我正在尝试弄清楚如何为此类用户设置注册表单,当只有少数属性可以通过批量分配进行设置时。有没有办法指定一组普通的attr_accessible
属性,以及一组只能在创建新的用户实例时访问的集合?
我不明白问题是什么。无论您的表单将表单数据发布到哪个控制器操作中,只需直接从 params
中的值设置模型的非白名单值:
def create
user = User.new(params[:user])
user.phone_number = params[:user][:phone_number]
... <other non-whitelisted attribute assignments> ...
user.save!
end
即使phone_number
不在白名单属性列表中(即即使它没有出现在User
模型中要attr_accessible
的参数中),这也将起作用。您可以对任何其他未列入白名单的表单属性执行相同的操作。
attr_accessible在类上,因此您可以随时重新打开类并再次定义它:
class User
attr_accessible :email, :password, :password_confirmation
end
这将进入您想要的任何控制器方法。完成后,您可以再次重新打开课程并设置新attr_accessible。
不过,这太可怕了。相反,您应该查看attr_accessible的定义,并尝试直接执行它的作用。或。