【问题标题】:Saving Mutiple arrays with strong parameters Ruby on Rails 4保存具有强参数的多个数组Ruby on Rails 4
【发布时间】:2015-10-07 11:07:46
【问题描述】:

我有一个这样的 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":"邓肯甜甜圈" ,"place_id":"ChIJSeoh6hkEGTkRsd0e1crAbHU","rating":4.3,"reference":"CnRhAAAAewgE30hrAcax1xdGPIf7M863 BOtNhRgfnncMx17uWMgtdTyGHGbTO76LX6yXsPyB4PcvfVzIeeIR1bxG0oSambqMYxFWwqHY3Cyfs6uWFp2QbVkGObvQ1LlTrdqLh1eZVgX8aL0iRFFhAnHEM8u1RxIQACDCn2BMD3IiG7tKri31BZWMPVULX ,"范围":"GOOGLE","types":["restaurant","food","point_of_interest","机构"],"vicinity":"拉合尔" ,"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

出现意外标记

谁能让我们摆脱这个混乱,告诉我们这里发生了什么,哪里是正确的路。 在此先感谢:)

【问题讨论】:

    标签: ruby-on-rails ruby json


    【解决方案1】:

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

    要允许参数数组,您只需使用哈希键和嵌套参数的允许属性数组即可。

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

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

    【讨论】:

    • 那么您确定您发送的参数正确吗?
    • 是的,我很确定,我保证的原因是我现在正在将这些值插入到 db 中,但不是通过强参数
    • 好吧 - {"places"=>" 不是有效的 JSON。这就是 JSON::parser 错误告诉你的。
    • 请原谅我的沟通差距。我用实际的 ajax 请求更新了我的问题。请看一下
    • 这也不是有效的 JSON。您可能想尝试验证它jsonlint.com。我想如果您可以在发送 AJAX 请求的位置显示 javascript,这可能会更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多