2009-12-19 52 views
0

在Rails控制器混錯我打電話這樣的:redirect_to的和:控制器:動作Rails中

redirect_to :controller => "user", :action => "login" 

user_controller.rb定義了以下方法:

class UserController < ApplicationController 
    def login 
    ### 
    end 

當我打電話給我redirect_to方法我得到了我的瀏覽器這個錯誤:No action responded to show.檢查服務器日誌我看到這一行:

Processing UserController#show (for 127.0.0.1 at 2009-12-19 12:11:53) [GET] 
    Parameters: {"action"=>"show", "id"=>"login", "controller"=>"user"} 

最後,我有這行我routes.rb

map.resources :user 

任何想法,我做錯了嗎?

回答

1

的黑客-Y答案是你的routes.rb中更改以下行

map.resources :user

map.resources :user, :collection => { :login => :get }

但是,這是不好的原因有多種 - 主要是因爲它打破了REST風格。相反,您應該使用SessionController並使用sessions/new登錄。你可以將它通過下面的行routes.rb中

map.login 'login', :controller=>"sessions", :action=>"new"

+0

+1,但我不認爲這是什麼大不了的打破寧靜的範例。宇宙包含4個以上的動詞。 :-) – MattMcKnight 2009-12-19 18:42:00

+0

我想,我的答案在功能上與此相同。謝謝你的幫助。 – kubi 2009-12-21 12:00:39

0

試圖

redirect_to :url => {:action => 'login', :controller => 'user'} 

或者你可能需要刪除路由或自己編寫。路由映射POST創建,PUT更新等。

0

別名,從而/login我最終什麼事做是創建一個新的login_controller來處理登錄。

下面是從我的routes.rb文件relavent位:

map.login '/login', :controller => 'login', :action => 'login' 

感謝您的幫助......

相關問題