Rails 3路由
问题描述:
我有一个奇怪的问题。 我正在用脚手架来创建CRUD和东西。 然后我添加了一个叫做cnt的函数,它应该给我表格条目的数量。 例如Album.count为密码。 但今天早上,整个路由指向该页面。 当我试图访问xxx /要素 我被链接了do/cntalbums。Rails 3路由
看起来像一个路由的事情 - 这是我的routes.rb:
Something::Application.routes.draw do
resources :albums
get "home/index"
resources :elements
root :to => 'home#index'
end
这就是全部。 我删除了cnt的视图,我删除了在albums_controller中定位的方法。 因此,没有任何剩余的地方,其中cnt被执行。 但是,似乎每个GET链接都到该页面。 我得到这个在我的日志:
Started GET "/albums" for xxxx at Fri Oct 05 09:54:42 +0200 2012
Processing by AlbumsController#cnt as HTML
Parameters: {"cntalbums"=>"albums"}
Completed 500 Internal Server Error in 47ms
ActionView::MissingTemplate (Missing template albums/cnt, application/cnt with {:formats=>[:html], :locale=>[:en], :handlers=>[:erb, :builder]}. Searched in:
* "/kunden/nnax.de/webseiten/entwicklung/poezy/app/views"
):
app/controllers/albums_controller.rb:18:in `cnt'
我:
match ':cntalbums' => 'albums#cnt', :as => 'cnt_albums', :via => :get
之前;但我已经删除了。 所以我没有任何线索,为什么我看不到我的专辑,元素等等。 最后:耙路线给我说:
albums GET /albums(.:format) albums#index
POST /albums(.:format) albums#create
new_album GET /albums/new(.:format) albums#new
edit_album GET /albums/:id/edit(.:format) albums#edit
album GET /albums/:id(.:format) albums#show
PUT /albums/:id(.:format) albums#update
DELETE /albums/:id(.:format) albums#destroy
elements GET /elements(.:format) elements#index
POST /elements(.:format) elements#create
new_element GET /elements/new(.:format) elements#new
edit_element GET /elements/:id/edit(.:format) elements#edit
element GET /elements/:id(.:format) elements#show
PUT /elements/:id(.:format) elements#update
DELETE /elements/:id(.:format) elements#destroy
home_index GET /home/index(.:format) home#index
root / home#index
所以我的理解很明显;我想去专辑或元素,它进入拟合控制器的功能。 但它总是试图达到AlbumsController#CNT
虽然该功能甚至不存在了
任何提示? :/
答
Rails路由是先到先得的,所以如果CNT规则高于一切,Rails将路由它。看规则
match ':cntalbums' => 'albums#cnt', :as => 'cnt_albums', :via => :get
注意任何URL都会与此匹配。路径/hello/world
将导致:cntalbums => "hello/world"
。
如果您从路由中删除了该行,但仍然被它路由,您确定已重新启动Rails服务器吗? (甚至尝试清除浏览器的缓存,但真的不应该成为问题)
答
试试这个
Something::Application.routes.draw do
resources :albums
...
match ':cntalbums' => 'albums#cnt', :as => 'cnt_albums', :via => :get
...
get "home/index"
resources :elements
root :to => 'home#index'
end
,因为轨道路线先到先得
是的它就像我的供应商,重新启动服务器;现在它再次工作... 起初我试图 匹配'albums/cnt'=>'相册#cnt' 但是,这导致了我的控制器的思想,该cnt是一个ID 他想用“显示“功能出于任何原因。 我怎么解决这个问题? – user1697061