Rails 4 params和“Unpermitted parameters”错误

时间:2013-11-16 22:19:34

标签: devise ruby-on-rails-4

我要做的只是创建一个用户(有设计):

  def create
    user = User.create user_params
    user.save
    render :json => user
  end

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

它不起作用,因为user_params仅返回:email和:username,没有密码。所以我深入了解会发生什么 - 我向服务器发送此请求负载(来自Chrome控制台):

{"email":"asd@asd.coma","username":"test","password":"asdasdasd","password_confirmation":"asdasdasd"}

我在控制台中看到的内容:

Processing by UsersController#create as JSON
  Parameters: {"email"=>"asd@asd.coma", "username"=>"test", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "user"=>{"username"=>"test", "email"=>"asd@asd.coma"}}
Unpermitted parameters: format, user
  1. 为什么我有:params用户未通过时?为什么它只是所有其他参数的副本以及为什么缺少密码?
  2. Unpermitted parameters是什么意思?如何解决?
  3. 为什么我需要require(:user)?没有它,似乎一切正常。
  4. 我想在手册或其他东西中有所有这些东西的简单解释,但我找不到它(

2 个答案:

答案 0 :(得分:3)

将JSON包装在以模型命名的根元素中:

{"user": 
  {
   "email":    "asd@asd.coma",
   "username": "test",
   "password": "asdasdasd",
   "password_confirmation": "asdasdasd"
  }
} 

答案 1 :(得分:0)

  1. 我真的需要看到你的观点。看起来正在发生的事情是您在fields_for :user或类似内容中发送了其他信息,因此您在创建时获得了参数hash :user ...

  2. 这意味着您拥有未列入白名单的参数。在Rails 4中,将strong_parameters添加到strong_parameters上的Rails has great documentation以及{{1}上的there are blog postsAPI documenation时,黑名单参数成为默认参数同样。

  3. strong_parameters是强参数的一部分,告诉控制器期望一个名为require(:user)的参数哈希包含允许的属性(因此:user