所以,我有一条命名路线:
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路由,但我自然可能忽略了一些东西。任何帮助表示赞赏。谢谢!
答案 0 :(得分:2)
你问题的答案在你给出的文章中。
看看部分:
默认情况下,动态细分不接受点 - 这是因为 dot用作格式化路由的分隔符。如果你需要使用 动态细分中的点添加一个覆盖此约束的约束 - 例如:id => / [^ /] + / 允许除斜杠之外的任何内容。
看那里的例子:
match ':controller(/:action(/:id))', :controller => /admin\/[^\/]+/
所以在你的例子中我相信它会是:
match 'ip/get/:ip' => 'ip_addresses#show', :id => /[^/]+/ , :via => :get
并将params[:id]
更改为params[:ip]