2012-07-06 31 views
4

我在使用腳手架生成的控制器內部創建自己的操作時遇到了一些麻煩。軌道控制器中的自定義動作與寧靜的行動?

我明白一切映射到寧靜的行動,但我正在建立一個用戶控制器,用戶可以登錄/註銷等,但當我創建的行動,並在routes.rb宣佈它,當我訪問用戶/ login

Couldn't find User with id=login 

它試圖將login用作ID參數,而不是將其用作操作。

的routes.rb

match 'users/login' => 'users#login' 

我覺得我做的事情錯的路線,所以如果有人可以幫助我,將是巨大的。

感謝

+0

我認爲你的路由正在呼叫用戶#show而不是用戶#登錄。所以你必須改變'用戶/登錄'到其他網址。 – Arun 2012-07-06 06:40:50

回答

8

我假設你routes.rb看起來像這樣:

resources :users 
match 'users/login' => 'users#login' 

的問題是,Rails使用第一個匹配的路由。從documentation

Rails的路線在他們指定的順序匹配的,所以如果你有一個resources :photos上方get 'photos/poll'show行動的爲resources行路線將get前行相匹配。要解決這個問題,請將get上面的resources行,以便首先匹配。

因此,無論定義自定義路線resources :users

match 'users/login' => 'users#login' 
resources :users 

...或使用該語法adding more RESTful actions

resources :users do 
    collection do 
    match 'login' 
    end 
end 

看到現有的路由(和它們的順序)運行rake routes從命令行。

相關問題