强参数和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
对象。 第二个使用permit
并require
使用类似params的对象。
params
通常是从post数据键/值对自动创建的,并且是ActionController::Parameters
类型。 要使用permit
和require
,您必须从哈希手动创建该类的对象。
然后使用这些消毒的参数,你必须改变
@inputData = Person.new(JSON.parse(data))
至
@inputData = Person.new(referral_params)