此功能的主要示例是创建用户时。您想要获取实例password
并从中创建password_hash
和password_salt
,而不是将“密码”保存到数据库。
因此,如果我正在创建一个可以创建用户的表单,如果没有“密码”属性,我该如何设置密码字段?
我认为之前可以通过在用户模型中使用attr_accessor
来解决这个问题,但我不知道如何使用强大的参数来解决这个问题:
def user_params
params.require(:user).permit(:username, :email, :password, :password_confirmation)
end
尝试通过user_params创建新实例时,只会导致出现UnknownAttributes错误:
@user = User.new(user_params)
答案 0 :(得分:0)
如果您想添加强力参数,可以使用.merge
方法
private
def user_params
params.require(:user).permit(:x, :y, :z).merge(hair_color: "brown")
end
或者,如果您希望在保存时操纵数据,则可能使用ActiveRecord callbacks,即before_create
:
#app/models/user.rb
Class User < ActiveRecord::Base
before_create :hash_password
private
def hash_password
if password #-> == self.password
#hash the password
#runs after validations
#runs just before DB insert
end
end
end