在Ruby on Rails中使用参数进行路由

时间:2017-07-26 03:48:28

标签: ruby-on-rails ruby routing

我是rails的新手,我正在努力正确处理路由。 现在我有一个名为“details”的链接,当用户点击它时,我希望使用我传入的位置参数调用方法“view_details”(在页面控制器中):

<%= link_to "Details", :controller => "pages", :action => "view_details", 
:location =>  v["coordinates"]%>

在我的routes.rb文件中,我有:

get 'pages/view_details/:location', to: 'pages#view_details'

我收到以下错误:     没有路线匹配[GET]     “/pages/view_details/latitude=37.3505570824247&longitude=-121.922104884669”

当我搜索路线时,我看到了这个(没有前缀):

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题在于您将哈希作为location参数的值传递,因此,它不是仅添加一个参数(即location),而是添加两个参数(即latitudlongitude),您的路由失败。

要解决此问题,您可以设置不带location的路线,如下所示:

get 'pages/view_details', to: 'pages#view_details'

现在,使用您现在拥有的相同链接,您将收到latitudlongitude分组在location中作为查询字符串的参数,类似于:

pages/view_details?location%5Blatitude%5D=37.3505570824247&location%5Blongitude%5D=121.922104884669

您可以使用params(与任何其他参数一样)在控制器中使用它们,例如:

latitude = params[:location][:latitude]
longitud = params[:location][:longitude]