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
。您可以自己将参数列入白名单。
我专门在 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
。您可以自己将参数列入白名单。