从我的agular 2前端应用程序中,我使用以下代码行将一个名为roles
的参数发送到我的api
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的一侧,我收到了这个参数
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]"}}
从控制器我尝试获取角色的值,但它没有显示任何内容。但如果我得到其他值,则返回该值。为什么它在我的控制器上失败
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
答案 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
下的一些参数,而某些参数则不会。
roles
参数嵌套在密钥user
roles
成为控制器中的数组。 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)