rails 上 #<String:0x007f66ec6ff180> ruby 的未定义方法“允许”

undefined method `permit' for #<String:0x007f66ec6ff180> ruby on rails

我专门在 Whosebug 上阅读了很多链接,但由于存在一些差异而找不到解决方案。所以我想阐明我的观点,如下所述:

我有一个 ajax 调用指向我的控制器,它只有一个参数 google_searched_locations ,它基本上包含 json 字符串

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","rating":4.3,"reference":"CnRhAAAA4x8yMjf9__CURWmYX6ojnpgu
-M1aL4Cvsmp6j2nKOLiqlBRlslTtPU8hUc6tJWAehCE967tW8Z623new_ivN8_PWbypr6ANDj_6AIxxGTQcwneyfHCigsHWhcdrUlcJAsQTycbHOTdmu6n8loZiU-hIQHNPqBNJRlho9fVjRfomU-BoUcdX_NGHhBFs_pxQiPZTlUD-W88o"
,"scope":"GOOGLE","types":["restaurant","food","point_of_interest","establishment"],"vicinity":"Lahore"
,"html_attributions":[]}]

我的操作包含以下代码

 def searchResults

  @restaurant = GoogleSearchedLocation.new(params_google_searched_locations)
  byebug
  if @restaurant.save!
    render json: { :status => :Ok }  
  else
      render json: { :status => :failed }
  end
end

params_google_searched_locations中的代码如下

def params_google_searched_locations
 params.require(:google_searched_locations).permit(:place_id)
 end

现在整个 ajax 调用失败并在响应中抛出以下错误

NoMethodError in GoogleSearchedLocationController#searchResults

undefined method `permit' for #< String:0x007f66ec5515b8 >

有原因的解决方案将不胜感激。提前致谢

通常,您会在参数上使用 permit/require 的组合,其中父级 returns 是一个哈希值,例如{user: {name: 'Maria'}.

然而,父returns一个JSON字符串。所以你要做的是解析 JSON 然后使用许可。但是,请记住,您刚刚失去了 Rails 的无差别访问权限,您可以在其中使用符号或字符串

访问密钥

但是,从你的例子中 JSON returns 一个数组,我认为你不能使用 permit.

如果它是一个散列,我相信你可以做到

def params_google_searched_locations json = params.require(:google_searched_locations) {place_id: JSON.parse(json).permit(:place_id)} end

无论如何,您不一定需要使用permit。您可以自己将参数列入白名单。