我想进行自己的简单身份验证。 所以我制作了用户模型和用户控制器。我有一张报名表 我的部分用户控制器。
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
这样的列。
我刚观看了Rails Cast剧集,但它是关于Rails 3而作者使用attr_accessible
但是我在Rails 4中读过我们应该使用强参数。
我该如何处理?
答案 0 :(得分:1)
强参数过滤参数以避免批量分配,直到它们被列入白名单。
permit
方法标识允许参数列表,并且必须与您的模型属性相对应。
所以,在你的情况下你应该写
def user_params
params.require(:user).permit(:username, :password_digest)
end
答案 1 :(得分:1)
您可能正在使用has_secure_password
并且未正确启用它。 has_secure_password
为您的模型添加了两个虚拟属性:password
和password_confirmation
。错误未知属性可能意味着您的模型未正确设置这两个属性。
由于BCrypt和has_secure_password使用此列来计算密码属性的哈希版本,因此在任何情况下都不应将password_digest
作为参数传递。换句话说,它没有形式的业务。
确保您拥有:
has_secure_password
模块。您对strong_parameters
的使用是正确的。问题出在您的模型中,可能与has_secure_password有关,而与strong_paramters无关。所以这一行是正确的:
def user_params
params.require(:user).permit(:username, :password, :password_confirmation)
end