0

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

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"):

我已经阅读了 Rails Routing from the Outside In Guide ( http://guides.rubyonrails.org/routing.html ) 但我自然可能忽略了一些东西。任何帮助表示赞赏。谢谢!

4

1 回答 1

2

您的问题的答案在于您提供的文章。

看一下部分:

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

看看那里的例子:

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

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

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

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

于 2013-03-27T13:17:27.280 回答