我正在尝试通过设计确认来确认帐户后,将用户转到自定义欢迎页面。自定义页面位于/ zone / setup /,可通过districts_setup_path访问。
为此,我添加了自定义路线
devise_for :users, :controllers => { :registrations => 'registrations', :confirmations => 'confirmations' }
并创建了我自己的控制器。然后我不得不重载confirmmations_controller.rb,现在有:
(应用程序/控制器/ confirmations_controller.rb)
class ConfirmationsController | Devise::ConfirmationsController # GET /resource/confirmation?confirmation_token=abcdef def show self.resource = resource_class.confirm_by_token(params[:confirmation_token]) if resource.errors.empty? set_flash_message(:notice, :confirmed) if is_navigational_format? sign_in(resource_name, resource) redirect_to districts_setup_path else render_with_scope :new # not: # respond_with_navigational(resource.errors, :status => :unprocessable_entity){ end end end
这种方法效果很好,但我很紧张,我并没有以这种方式做到这一点。特别是,我刚刚删除了response_with_navigational(...)行,我真的不明白。
我希望在Devise wiki的操作方法中写下这一切,我只是在寻找对rails来说相当新的反馈,甚至更新的Devise / engine / warden。
答案 0 :(得分:1)
看看Devise的ConfirmationsController,您可以发现受保护的方法after_confirmation_path_for(resource_name, resource)
。覆盖它(而不是整个动作)将以更少的努力产生相同的结果。
一般来说,重写Devise的控制器没有问题,因为它们代表的默认行为并不总是适合应用程序的需要。话虽如此,你必须先采取一些措施才能覆盖Devise的代码: