2012-06-25 40 views
1

我的routes.rb是如下軌3.0控制器映射

resources :users 
match 'users/login' 

和耙路線顯示

users GET /users(.:format)   {:action=>"index", :controller=>"users"} 
     POST /users(.:format)   {:action=>"create", :controller=>"users"} 
new_user GET /users/new(.:format)  {:action=>"new", :controller=>"users"} 
    edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"} 
     user GET /users/:id(.:format)  {:action=>"show", :controller=>"users"} 
      PUT /users/:id(.:format)  {:action=>"update", :controller=>"users"} 
      DELETE /users/:id(.:format)  {:action=>"destroy", :controller=>"users"} 
users_login  /users/login(.:format) {:controller=>"users", :action=>"login"} 

但是當我做

http://localhost:3000/users/login 

其進入/用戶/節目。我可以理解爲什麼它發生,因爲它在控制檯上顯示

Processing by UsersController#show as HTML 
Parameters: {"id"=>"login"} 

這怎麼解決。

Harshit

回答

1

show的路由優先,Rails認爲'login'是一個ID。爲了完成你想要什麼,你需要用這種方式來定義你的路由:

resources :users do 
    collection do 
    get :login 
    end 
end 
+0

偉大的工作.. – harshit

0

上述resources :users地點match 'users/login'。匹配url時,rails將選擇符合url格式的routes.rb中的第一個路徑。現在,它發現'users /:id'匹配'users/login',因此id = login。

0

試着改變你的routes.rb文件,下面的代碼相匹配。這將確保'users/login'路線在resources :users之前匹配。將match更改爲get僅當發出GET請求時,它纔會匹配該路線。

的routes.rb

get 'users/login' 
resources :users 

參考

0

如果你希望你的http://localhost:3000/users/login指向您login方法users控制器,你只需要做到這一點在你的routes.rb

get 'users/login' => 'users#login' 

而且這不應該必須resources :users