2012-03-12 50 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