2009-06-24 50 views
2

我有一個OptionsController,其中包含一個動作account。相應的視圖有三種形式,分別發佈到三種不同的動作:update_profile,update_userchange_password。每個動作都會運行,然後應該重定向回action,在這裏再次設置並呈現視圖。如何在維護DRY的同時將多個操作重定向到單個操作?

我試圖保持乾燥,並創建一個after_filter做重定向:

after_filter(:only => [:change_password, :update_profile, :update_user]) do |controller| 
    controller.send(:redirect_to, :action => :account) 
end 

然而,這似乎並沒有被調用;相反,行動抱怨說它的觀點無法找到。

Template is missing 
Missing template options/update_user.erb in view path app/views 

有沒有什麼辦法可以幹這種方式,或者我應該堅持在這三個行動的每一個redirect_to電話?

回答

8

只是將redirect_to調用放在每個操作中。 DRY和無法理解的魔法之間有一條細線。我想嘗試做一些像after_filter或其他任何不明顯地破壞行爲的預期行爲的東西可能太過神奇。

2

我的理解是,在之後運行之後,將響應發送到客戶端,即在發生任何呈現或重定向之後,這就是您看到該錯誤的原因。它們旨在讓您執行諸如日誌數據或基準或關閉連接或任何其他類型的清理操作