强参数和json输入轨道4

我试图通过JSON字符串保存数据,其中我有嵌套的关联属性。 我不想使用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 

我已经定义了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 

但我不知道如何使用此regerral_params方法以及JSON输入字符串….

您可以尝试将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 

方法内的第一行解析你的JSON(如果我没记错的话,返回一个Ruby哈希)并从中创建一个新的ActionController::Parameters对象。 第二个使用permitrequire使用类似params的对象。

params通常是从post数据键/值对自动创建的,并且是ActionController::Parameters类型。 要使用permitrequire ,您必须从哈希手动创建该类的对象。


然后使用这些消毒的参数,你必须改变

 @inputData = Person.new(JSON.parse(data)) 

 @inputData = Person.new(referral_params)