我想自己进行简单的身份验证。所以我制作了用户模型和用户控制器。我有一张报名表我的用户控制器的一部分。
def create
@user = User.new(user_params)
if @user.save
redirect_to root_path, notice: "You've successfully singed up."
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:username, :password, :password_confirmation)
end
错误:
未知属性:密码
在我的"用户"表中,每个用户都有username
和password_digest
。所以没有像password
那样的列。
我刚刚看了RailsCast一集,但它是关于Rails3的,作者使用attr_accessible
,但我在Rails4中读到我们应该使用强参数。
我该怎么处理?
很可能您正在使用has_secure_password
,但您没有正确启用它。has_secure_password
为模型添加了两个虚拟属性:password
和password_confirmation
。错误未知属性可能意味着这两个属性没有在模型上正确设置。
在任何情况下都不应该将password_digest
作为参数传递,因为BCrypt和has_secure_password使用此列来计算密码属性的哈希版本。换言之,它不应该以这种形式存在。
确保你有:
- 将BCrypt宝石包含在您的宝石文件中
- Correct在您的用户模型中包含了
has_secure_password
模块
您对strong_parameters
的使用是正确的。问题出在您的模型中,可能与has_secure_password有关,而不是strong_paramters。所以这一行是正确的:
def user_params
params.require(:user).permit(:username, :password, :password_confirmation)
end
强参数过滤参数以避免大量分配,直到它们被列入白名单。
permit
方法标识允许的参数列表,并且必须与模型的属性相对应。
所以,在你的情况下,你应该写
def user_params
params.require(:user).permit(:username, :password_digest)
end