【问题标题】:strong parameter and json input rails 4强参数和json输入rails 4
【发布时间】:2014-02-04 10:26:02
【问题描述】:

我正在尝试通过嵌套关联属性的 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

我已经定义了允许强参数方法允许这样的嵌套属性

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 输入字符串一起使用....

【问题讨论】:

  • 你从哪里得到data?已经发布了吗?
  • 是的,它是 POST 方法,"data = request.body.read" 像​​这样

标签: ruby-on-rails json ruby-on-rails-4 nested-attributes strong-parameters


【解决方案1】:

您可以尝试将您的 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 通常是从发布数据键/值对自动创建的,类型为ActionController::Parameters。要使用permitrequire,您必须从哈希中手动创建that class 的对象。


要使用这些经过清理的参数,您必须进行更改

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

@inputData = Person.new(referral_params)

【讨论】:

  • 感谢您的回答,现在看来它可以工作了……只需要好好测试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多