JNI*_*oad 6 json ruby-on-rails nested-attributes strong-parameters ruby-on-rails-4
我试图通过JSON String保存数据,其中我有嵌套的关联属性.我不想使用attr_accessible.我几乎得到了强参数的逻辑,但仍然有问题使它们工作.我正在获取JSON字符串并使用它来使用它来保存数据
data = request.body.read
@inputData = Person.new(JSON.parse(data))
@inputData.save!
if@inputData.valid?
render :status => 200, :json => "Data inserted successfully"
else
render :status => 404, :json => "Not Inserted "
end
Run Code Online (Sandbox Code Playgroud)
我已经定义了permit strong参数方法允许这样的嵌套属性
def referral_params
params.require(:person).permit(:id, user_attributes: [:id, :first_name, :last_name, :email], device_attributes: [:id, :os_type, :os_version], location_attributes: [:id, :latitude, :longitude], duration_attributes[:id, :start_time, :end_time]) end
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用此regerral_params方法以及JSON输入字符串....
yer*_*ips 19
您可以尝试将referral_params方法更改为:
def referral_params
json_params = ActionController::Parameters.new( JSON.parse(request.body.read) )
return json_params.require(:person).permit(:id, user_attributes: [:id, :first_name, :last_name, :email], device_attributes: [:id, :os_type, :os_version], location_attributes: [:id, :latitude, :longitude], duration_attributes[:id, :start_time, :end_time])
end
Run Code Online (Sandbox Code Playgroud)
方法内的第一行解析你的JSON(如果我没记错的话,返回一个Ruby哈希)并ActionController::Parameters从中创建一个新对象.第二个使用permit和require那个类似params的对象.
params通常是根据后期数据键/值对自动创建的,并且属于该类型ActionController::Parameters.要使用permit和require,您必须从哈希手动创建该类的对象.
然后使用这些消毒的参数,你必须改变
@inputData = Person.new(JSON.parse(data))
Run Code Online (Sandbox Code Playgroud)
至
@inputData = Person.new(referral_params)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9509 次 |
| 最近记录: |