2013-03-27 176 views
0

所以,我有一个名为路线:动态路由不渲染

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

正如你所看到的,我想在IP(后“得到”)是动态的,但我不断收到路由错误当我尝试它。这里是我的路线:

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的路由在指南( http://guides.rubyonrails.org/routing.html)但自然我可能会忽略某些东西。任何帮助表示赞赏。谢谢!

+0

你能解释一下你想完成什么?看看代码和路线,我怀疑这是解决这个问题的好办法。虽然这不是你的答案的直接答案,但我可以建议更干净的代码,这样做是一样的。 – Aleks 2013-03-27 13:04:54

+0

你能分享你收到的错误吗? – KULKING 2013-03-27 13:04:56

+0

Aleks,我同意这可能会更清洁,但我基本上完成了一个编码练习,它要求命名的路由是RESTful的,并且在#show的情况下是动态的。如果您对提供的代码有任何建议,请随时添加! – aceofbassgreg 2013-03-27 13:17:08

回答

2

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

看看部分:

By default dynamic segments don’t accept dots – this is because the dot is used as a separator for formatted routes. If you need to use a dot within a dynamic segment add a constraint which overrides this – for example :id => /[^/]+/ allows anything except a slash.

看看那里的例子:

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

所以,在你的榜样,我相信这将是:

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

,改变params[:id]params[:ip]

+0

Oooooooooh,我早些时候读过那部分,现在就读了,想着“但是我没有做,除非你将点数算作冒号“,然后它让我知道IP地址有点。 D'哦。让我试试你的建议! – aceofbassgreg 2013-03-27 13:28:49

+0

为了澄清,我的路由动作应该如下所示:'match'ip/get /:ip =>/[^ /] + /'=>'ip_addresses#show',:via =>:get'?有时Rails指南对我来说有点简洁。 – aceofbassgreg 2013-03-27 13:33:03

+0

你也有一个例子,在网页上的'match'photos /:id'=>'photos#show',:id =>/[AZ] \ d {5} /',所以在你的情况下,我相信它会匹配ip/get /:ip'=>'ip_addresses#show',:id =>/[^ /] + /,:via =>:get' – Aleks 2013-03-27 15:05:30