2011-05-25 46 views
1

在我的網絡應用程序中,我有一個通過電子郵件進行的典型用戶激活過程。自定義寧靜路線的最佳做法

此刻,我對激活過程中的每一步都有一個自定義控制器操作,即我有一個「激活」操作,或多或少只是呈現「註冊」頁面,然後我有另一個操作「激活「,這是註冊頁面上實際表單的目標行爲。

我不知道這是否是最佳做法? - 現在,我即將實施管理員啓動的密碼重置(管理員單擊某個特定用戶的密碼重置鏈接,用戶將收到一封電子郵件,其中包含一個鏈接,指向可以設置新密碼的頁面) 。我會走得更遠,再添加3個控制器操作(一個用於發送重置電子郵件,一個用於訪問重置頁面,另一個用於實際重置表單的操作)。

這似乎混亂了我的控制器不少,我不知道這是否是「正確」的方式來做到這一點?

THX的任何意見

回答

2

你在做什麼是好的 - 這是沒有必要的,以符合您的控制器操作的REST風格的動作。只有適合你的模型時才應該使用REST,但是你不應該試圖讓你的模型符合RESTful體系結構,除非它使得交互更容易和直觀。

儘管將這些自定義操作放置到其自己的控制器中可能是最好的,而不是UsersController。一旦你覺得你的控制器太擁擠了,把某些動作轉移到單獨的模塊或控制器中可能是一個好主意。

class RegistrationController 
    def activate # perform the activation 
    .. 
    end 

    def activation # show the activation page 
    ... 
    end 
end 

class PasswordController 
    def send # send the email 
    end 

    def resetter # show the page to reset the password 
    end 

    def reset # actually reset the password 
    end 
end 

這些控制器操作可以通過自定義路由而不是資源訪問。

match 'register/activation' => 'registration#activation' 
post 'register/activate' => 'registration#activate' 

post 'password/send' => 'password#send' 
match 'password/resetter' => 'password#resetter' 
post 'password/reset' => 'password#reset' 
+0

thx,這看起來比我目前的做法要乾淨得多 – DeX3 2011-05-26 08:03:35