控制器中'Unknown attribute'错误



我想自己进行简单的身份验证。所以我制作了用户模型和用户控制器。我有一张报名表我的用户控制器的一部分。

  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

错误:

未知属性:密码

在我的"用户"表中,每个用户都有usernamepassword_digest。所以没有像password那样的列。

我刚刚看了RailsCast一集,但它是关于Rails3的,作者使用attr_accessible,但我在Rails4中读到我们应该使用强参数。

我该怎么处理?

很可能您正在使用has_secure_password,但您没有正确启用它。has_secure_password为模型添加了两个虚拟属性:passwordpassword_confirmation。错误未知属性可能意味着这两个属性没有在模型上正确设置。

在任何情况下都不应该将password_digest作为参数传递,因为BCrypt和has_secure_password使用此列来计算密码属性的哈希版本。换言之,它不应该以这种形式存在。

确保你有:

  1. 将BCrypt宝石包含在您的宝石文件中
  2. 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

相关内容

最新更新