使用强参数保存多个数组Ruby on Rails 4

时间:2015-10-07 11:07:47

标签: ruby-on-rails ruby json

我有像这样的ajax响应,

  

google_searched_locations [{“geometry”:{“location”:{“J”:31.482273,“M”:74.33069999999998}},“icon”:“https://maps.gstatic.com/mapfiles   /place_api/icons/restaurant-71.png","id":"b93a99a46343de01d0d928f99470f9b0f5f6f11d","name":"Dunkin'Donuts“   “place_id”: “ChIJSeoh6hkEGTkRsd0e1crAbHU”, “等级”:4.3, “参考”:“CnRhAAAAewgE30hrAcax1xdGPIf7M863   bOtNhRgfnncMx17uWMgtdTyGHGbTO76LX6yXsPyB4PcvfVzIeeIR1bxG0oSambqMYxFWwqHY3Cyfs6uWFp2QbVkGObvQ1LlTrdqLh1eZVgX8aL0iRFFhAnHEM8u1RxIQACDCn2BMD3IiG7tKri31BRoULMSagTU-EmxswgLxzCOWPVVnlpI”   , “范围”: “GOOGLE”, “类型”: “餐厅”, “食品”, “point_of_interest”, “建立”], “附近”: “拉合尔”   “html_attributions”:[]}]

在JSON.parse(thisString)之后,我通过使用params [“places”] [0] [“geometry”]得到所需的结果然后循环遍历它,但我知道当Rails有它时它不是更好的方法那里的参数很强,所以我在搜索后尝试了一些解决方案,下面是我的强参数函数

def google_places
    json_params = ActionController::Parameters.new(JSON.parse(request.body.read) )
json_params.require(:google_searched_locations).permit(:icon)
end

但它会出现以下错误,

  

SearchesController#searchResults

中的JSON :: ParserError      

757:'places =%5B%7B%22geometry

的意外标记

任何人都可以让我们摆脱这种混乱,并告诉我们这里发生了什么,以及正确的方向。 在此先感谢:)

1 个答案:

答案 0 :(得分:0)

您无需手动解析JSON参数。如果请求具有正确的格式(更具体地说是正确的mime类型头文件),Rails将自动解析参数。实际上,这样做会更慢并且使用更多内存,因为您正在进行两次相同的解析工作。

要允许参数数组,只需使用散列键和嵌套参数的允许属性数组。

def google_places
  params.permit(places: [:icon, { location: [:H, :L] }])
end

如果可能,您应该将HL参数更改为小写,以便您可以直接将它们映射到属性,而不会违反小写属性的ruby约定。