动态路由不呈现

时间:2013-03-27 13:00:40

标签: ruby-on-rails ruby routing

所以,我有一条命名路线:

match 'ip/get/:ip' => 'ip_addresses#show', :via => :get

正如你所看到的,我希望ip(在'get'之后)是动态的,但是当我试用它时我不断收到路由错误。这是我的路线:

  root        /                     ip_addresses#index
ip_add POST   /ip/add(.:format)     ip_addresses#create
       GET    /ip/add(.:format)     ip_addresses#new
ip_all GET    /ip/all(.:format)     ip_addresses#index
       GET    /ip/get/:ip(.:format) ip_addresses#show
       DELETE /ip/all(.:format)     ip_addresses#destroy

这是我的show行动:

def show
  IpAddress.find(params[:id])
end

编辑:路由错误:

ActionController::RoutingError (No route matches [GET] "/ip/get/1.2.3.4"):

我已经从外部指南(http://guides.rubyonrails.org/routing.html)阅读了Rails路由,但我自然可能忽略了一些东西。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

你问题的答案在你给出的文章中。

看看部分:

  

默认情况下,动态细分不接受点 - 这是因为   dot用作格式化路由的分隔符。如果你需要使用   动态细分中的点添加一个覆盖此约束的约束 -   例如:id => / [^ /] + / 允许除斜杠之外的任何内容。

看那里的例子:

match ':controller(/:action(/:id))', :controller => /admin\/[^\/]+/

所以在你的例子中我相信它会是:

match 'ip/get/:ip' => 'ip_addresses#show', :id => /[^/]+/ , :via => :get

并将params[:id]更改为params[:ip]