【问题标题】:Routing with Parameters in Ruby on RailsRuby on Rails 中的带参数路由
【发布时间】:2017-07-26 03:48:28
【问题描述】:

我是 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"

当我 rake 路由时,我看到了这个(没有前缀):

我该如何解决这个问题?

【问题讨论】:

  • 你能分享 rake 路由输出吗?路由的前缀是什么?
  • 刚刚编辑了帖子,看插入的图片

标签: ruby-on-rails ruby routing


【解决方案1】:

问题在于您将 hash 作为location 参数的值传递,因此,它不仅添加了一个参数(即location),还添加了两个参数(即@987654324 @ 和 longitude) 并且您的路由失败。

要解决此问题,您可以在没有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]

【讨论】:

  • 谢谢,这解决了我遇到的错误。但是现在它似乎正在调用 pages#show 操作并显示 pages/show 视图。 view_details 操作根本没有被执行。你知道是什么原因造成的吗?
  • 没关系,我可以使用stackoverflow.com/questions/30633639/…修复它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多