2012-03-12 90 views
1

我正在使用Devise 1.5.3。Rails 3爲註冊設計自定義重定向

我繼承Devise::RegistrationsController定製我自己的路了after_update:

class RegistrationsController < Devise::RegistrationsController 
    protected 
    def after_update_path_for(resource) 
    some_path 
    end 
end 

Rails所後試圖在views/registrations/找到意見登記的行爲(新,創造等),但沒有在/views/devise/registrations

當然,我可以全部複製/views/devise/registrationsviews/registrations/。但它不適合我,因爲我的其他觀點(對於非定製控制器)仍然在/views/devise/registrations

我該如何解決?

回答

2

我認爲它應該工作,如果你的範圍你RegistrationsController到設計的範圍:

class Devise::MyRegistrationsController < Devise::RegistrationsController 
    # ... 
end 

當然你不能爲RegistrationsController使用相同的名字和你有views/devise/registrations文件夾重命名爲views/devise/my_registrations,你有更新您的routes.rb文件,以及...但這種設置它應該工作...

另一種選擇,我認爲,將覆蓋/在初始注入方法:

class Devise::RegistrationsController 
    protected 
    def after_update_path_for(resource) 
    some_path 
    end 
end 

這可能會更簡單...

+0

非常感謝。有用。 – 2012-03-12 16:26:38

1

建立在Vapire的答案。我認爲注射選擇最簡單/最好。

因爲我想在導航欄中包含一個永久的「編輯我的註冊」,以便可以從任何頁面調用它,所以我還想將用戶發回到它們單擊的頁面。

我發現一個簡單的方法來做到這一點是重寫一些控制器的行爲,並使用會話變量來捕獲引用路徑。如果必須重新加載表單以糾正錯誤,則使用會話變量可保持引用路徑完好。

的routes.rb

devise_for :users, :controllers => {:registrations=>'users/registrations'} 

控制器/用戶/ registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController 
    def edit 
    session[:called_from]=request.referer 
    super #revert to standard behaviour 
    end 

    def after_update_path_for(resource) 
    session[:called_from] #returns to the page called from 
    end 

end