ruby-on-rails-3 - Rails3 为可确认模块设计自定义路由

标签 ruby-on-rails-3 devise

在用户通过设计的可确认确认其帐户后,我试图将用户路由到自定义欢迎页面。自定义页面位于/districts/setup/,可通过 Districts_setup_path 访问。

为此,我添加了自定义路线,

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

并创建了我自己的 Controller 。然后我不得不重载confirmations_controller.rb,现在有:

(app/controllers/confirmations_controller.rb)

类 ConfirmationsController |设计::确认 Controller

# GET/resource/confirmation?confirmation_token=abcdef
定义显示
self.resource = resource_class.confirm_by_token(params[:confirmation_token])

如果resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_navigational_format?
登录(资源名称,资源)
重定向到区设置路径
别的
render_with_scope :新
# 不是:
# respond_with_navigational(resource.errors, :status => :unprocessable_entity){
结尾
结尾
结尾

这很好用,但我很紧张,因为我没有以最理想和最稳健的方式来做这件事。特别是,我刚刚删除了我真的不明白的 respond_with_navigational( ... ) 行。

我希望将这一切都写在 Devise wiki 的操作指南中,我只是在寻找对 Rails 相当新的反馈,甚至对 Devise/engines/warden 来说更新。

最佳答案

查看 Devise 的 ConfirmationsController,您可以发现 protected 方法 after_confirmation_path_for(resource_name, resource) .覆盖它(而不是整个 Action )将以更少的努力产生相同的结果。

一般来说,重写 Devise 的 Controller 没有问题,因为它们代表了并不总是适合应用程序需求的默认行为。话虽如此,在覆盖 Devise 的代码之前,您必须采取一些措施:

  • 设计不仅仅是系统的另一个组件——它处理用户身份验证,这是一个非常敏感的问题。确保在提交之前不要破坏任何重要的东西。您可以通过从 github fork Devise 项目、进行更改并运行测试来做到这一点。
  • 当您进行更改以设计和覆盖其代码时,升级到新版本将变得更加困难,这可能与您的更改不兼容。
  • 如果您确实决定进行更改,请寻找可能实现目标的最小更改。在大多数情况下,Devise 的团队已经预见到在某些地方需要定制,并留下专门用于定制的方法(如上面的那个)。同样,在 Devise 的 GitHub 上查看文件的代码会给你一个好主意,什么是根据你的需要自定义其行为的最佳方法。
  • 关于ruby-on-rails-3 - Rails3 为可确认模块设计自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774342/

    相关文章:

    ruby-on-rails - 设计路由: is there a way to remove a route from Rails. application.routes?

    apache - 如何处理仅处理子域的 Rails 站点的 VirtualHost/Passenger 条目?

    ruby-on-rails-3 - Rails 与 postgresql+postgis 几何数据类型不完全兼容

    ruby-on-rails - 使用 Devise in Rails 4 的虚拟属性

    ruby-on-rails - 在 Ruby on Rails 中管理用户(和所有权)

    ruby-on-rails - 在 Ruby on Rails 中为 Rspec 和 Rack::Test 设置请求 header

    ruby-on-rails - 在 Heroku 上预编译失败,initialize_on_precompile 设置为 false

    ruby-on-rails - 如何让 Devise 在 Heroku 上发送确认电子邮件?

    ruby-on-rails - 使用 Devise 登录后重定向

    ruby-on-rails - 我如何在 capybara 中单击此按钮