无法在Rails的控制器中获取user_params [:roles]

时间:2016-10-19 10:12:32

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

从我的agular 2前端应用程序中,我使用以下代码行将一个名为roles的参数发送到我的api

Angular2前端请求

createNewUser(model: User) {
    var params = JSON.stringify({
      first_name: model.first_name,
      last_name: model.last_name,
      email: model.email,
      contact_number: model.contact_number,
      user_name: model.user_name,
      password: model.password,
      roles: model.roles
    });
    console.log("From Service " + params);
    var headers = new Headers();
    headers.append('Content-Type','application/json');
    return this.http.post('http://localhost:3003/api/users',params, {headers : headers})
      .map(res => res.json());
  }
从这段代码

您已观察到我已将参数名称roles发送到rails api。

在API的一侧,我收到了这个参数

Rails控制台Outupt

UsersController处理#create as JSON

  Parameters: {"first_name"=>"nifras", "last_name"=>"ismail", "email"=>"nifrasismail@gmail.com", "contact_number"=>"3778990300", "user_name"=>"ffgfg", "password"=>"[FILTERED]", "roles"=>[0, 1], "user"=>{"first_name"=>"nifras", "last_name"=>"ismail", "email"=>"nifrasismail@gmail.com", "contact_number"=>"3778990300", "user_name"=>"ffgfg", "password"=>"[FILTERED]"}}

从控制器我尝试获取角色的值,但它没有显示任何内容。但如果我得到其他值,则返回该值。为什么它在我的控制器上失败

我的控制器user_params方法

def user_params
      params.require(:user).permit(:first_name, :last_name, :email, :contact_number, :user_name, :password, :roles)
    end

我试图从下面的代码行中获取值

puts(user_params[:first_name]) # ==> nifras
puts(user_params[:roles] # nothing will return

3 个答案:

答案 0 :(得分:1)

你的roles param是一个数组,因此当列入白名单时,你应该这样做:

params.require(:user).permit(:first_name, :last_name, :email, :contact_number, :user_name, :password, :roles => [])

roles应嵌套在user的params

您的user_params正在寻找嵌套在user密钥内的params,例如来自您发布的参数的"user"=>{"first_name"=>"nifras", ....。但是你可以看到,roles里面没有user键,而是作为params的键而不是params用户的键,所以你的user_params方法只会返回一边的部分下面是 {} ,因为这是用户的参数:

"user"=>{"first_name"=>"nifras", "last_name"=>"ismail", "email"=>"nifrasismail@gmail.com", "contact_number"=>"3778990300", "user_name"=>"ffgfg", "password"=>"[FILTERED]"}

但你的角色参数不在其中

答案 1 :(得分:1)

用户参数应嵌套在密钥user下。并且您会收到嵌套在键user下的一些参数,而某些参数则不会。

  1. 确保roles参数嵌套在密钥user
  2. 允许roles成为控制器中的数组。
  3. Controller user_params方法:

    def user_params
      params.require(:user).permit(:first_name, :last_name, :email,
        :contact_number, :user_name, :password, roles: [])
    end
    

答案 2 :(得分:1)

CMake下没有:roles,因此要么在用户字段下添加表单中的角色,要么:user没有permit的参数

.require(:user)