控制器中出现“未知属性”错误

时间:2014-10-05 16:19:48

标签: ruby-on-rails ruby-on-rails-4

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

  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这样的列。

我刚观看了Rails Cast剧集,但它是关于Rails 3而作者使用attr_accessible但是我在Rails 4中读过我们应该使用强参数。

我该如何处理?

2 个答案:

答案 0 :(得分:1)

强参数过滤参数以避免批量分配,直到它们被列入白名单。

permit方法标识允许参数列表,并且必须与您的模型属性相对应。

所以,在你的情况下你应该写

def user_params
  params.require(:user).permit(:username, :password_digest)
end

答案 1 :(得分:1)

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

由于BCrypt和has_secure_password使用此列来计算密码属性的哈希版本,因此在任何情况下都不应将password_digest作为参数传递。换句话说,它没有形式的业务。

确保您拥有:

  1. 在您的gemfile中包含BCrypt gem
  2. 正确包含用户模型中的has_secure_password模块。
  3. 您对strong_parameters的使用是正确的。问题出在您的模型中,可能与has_secure_password有关,而与strong_paramters无关。所以这一行是正确的:

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