与attr_accessible和注册表单混淆



对于我正在从事的 Rails 项目,用户模型中的大部分信息都是保密的,例如双因素身份验证电话号码。

我只将模型中的基础知识、emailpasswordpassword_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的定义,并尝试直接执行它的作用。或。

最新更新