我将以下JSON发布到我的'user_controller'控制器类中的rails create方法。
{"user_detail_attributes":
{
"login":"dan123456",
"password":"password",
"password_confirmation":"password"
},
"surname":"REST_TEST",
"firstname":"REST_TEST",
"phone":"0456782",
"grad_year":2010,
"jobs":false,
"email":"REST_TEST@EMAIL.co.uk"
}
我的user_params如下:
params.require(:user).permit(
:surname, :firstname, :phone, :grad_year, :jobs, :email,
user_detail_attributes: [:id, :password, :password_confirmation, :login])
然后Rails应该将此json映射到用户。
因此params变量应该包含一个用户,在该用户内部应该是属性包括 user_detail_attributes。
然而,user_detail属性出现在用户params变量之外,作为一个完全独立的params变量,与用户params处于同一级别。
那么,应该发生什么:
user
+surname
+firstname
.
.
.
+user_detail_attributes
+login
+password
+password_confirmation
实际发生了什么:
user_detail_attributes
+login
+password
+password_confirmation
user
+surname
+firstname
.
.
.
然后导致用户被映射到我的数据库中的用户表,但没有user_details被映射到该表。
有谁知道为什么会这样,以及我是否可以修复它?如果我需要使用JSON格式或rails应用程序中的某些东西。
谢谢,
丹
编辑:已修复
答案 0 :(得分:0)
根据Strong Parameters Documentation
你应该这样做:
parameters.require(:user).permit(:surname, :firstname, :phone, :grad_year, :jobs, :email, {user_detail_attributes: [:login, :password, :password_confirmation] })
请注意{}
user_detail_attributes
我在测试台中的测试
hash = {user: {user_detail_attributes: { login: "dan123456", password: "password", password_confirmation: "password"}, surname:"REST_TEST", firstname:"REST_TEST", phone:"0456782", grad_year:2010, jobs:false, email:"REST_TEST@EMAIL.co.uk"} }
params = ActionController::Parameters.new(params)
parameters.require(:user).permit(:surname, :firstname, :phone, :grad_year, :jobs, :email, {user_detail_attributes: [:login, :password, :password_confirmation] })
Outuput:
{"surname"=>"REST_TEST", "firstname"=>"REST_TEST", "phone"=>"0456782", "grad_year"=>2010, "jobs"=>false, "email"=>"REST_TEST@EMAIL.co.uk", "user_detail_attributes"=>{"login"=>"dan123456", "password"=>"password", "password_confirmation"=>"password"}}
答案 1 :(得分:0)
我已经解决了这个问题。
JSON的格式应如下:
{"user":
{"user_detail_attributes":
{
"login":"dan123456",
"password":"password",
"password_confirmation":"password"
},
"surname":"REST_TEST",
"firstname":"REST_TEST",
"phone":"0456782",
"grad_year":2010,
"jobs":false,
"email":"REST_TEST@EMAIL.co.uk"
}
}
我在开始时缺少用户属性,因为这是我的c#JSON编码器从我的user和user_detail_attribute类格式化JSON的方式。
我通过手动创建JSON进行了游戏,结果证明这是修复。
感谢大家的帮助:)