【问题标题】:undefined method `permit' for #<String:0x007f66ec6ff180> ruby on rails#<String:0x007f66ec6ff180> ruby​​ on rails 的未定义方法“permit”
【发布时间】:2015-10-08 12:42:40
【问题描述】:

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

我有一个 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 调用失败并在响应中抛出以下错误

GoogleSearchedLocationController#searchResults 中的 NoMethodError

#

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

【问题讨论】:

  • 我认为您应该要求单数,而不是复数,即params.require(:google_searched_location).permit(:place_id)。不过可能只是巧合。
  • 你在params得到了什么,你能从控制台发布参数吗
  • @japed 不是他传递的钥匙
  • @Deepak 亲爱的我只有一个参数 google_searched_location
  • 当你给新的stackoverflow用户-1时请提供反馈

标签: ruby-on-rails ruby strong-parameters


【解决方案1】:

通常,您会在父返回哈希的参数上使用permit/require 的组合,例如{user: {name: 'Maria'}.

但是,父级返回一个 JSON 字符串。因此,您要做的是解析该 JSON,然后使用许可。但是,请记住,您刚刚失去了 Rails 的冷漠访问,您可以使用符号或字符串访问密钥

但是,从您的示例来看,由于 JSON 返回一个数组,我认为您不能使用 permit。

如果是哈希,我相信你可以做到

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

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

【讨论】:

  • 我非常怀疑这是同一个错误。解析 JSON 不会返回字符串,因此不可能得到相同的错误。你能告诉我JSON.parse(json) 返回什么吗?
  • 您说我可以自己将参数列入白名单。你能解释一下吗?因为据我所知,我们曾经将 rails 3 中模型中的参数列入白名单,而在 rails 4 中我们使用强参数。我该怎么办?
  • permit/require 方法只是助手,它们并没有真正发挥作用。因此,例如,在您的情况下,您可以执行params[:google_searched_locations][:place_id],它会完全一样。我认为唯一的区别是,在生产中,如果 google_searched_locations 参数未通过,它会向客户端提出错误
猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
相关资源
最近更新 更多