使用强params向实例添加属性

时间:2014-01-13 04:08:54

标签: ruby-on-rails

此功能的主要示例是创建用户时。您想要获取实例password并从中创建password_hashpassword_salt,而不是将“密码”保存到数据库。

因此,如果我正在创建一个可以创建用户的表单,如果没有“密码”属性,我该如何设置密码字段?

我认为之前可以通过在用户模型中使用attr_accessor来解决这个问题,但我不知道如何使用强大的参数来解决这个问题:

def user_params
    params.require(:user).permit(:username, :email, :password, :password_confirmation)
end

尝试通过user_params创建新实例时,只会导致出现UnknownAttributes错误:

@user = User.new(user_params)

1 个答案:

答案 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