【问题标题】:How to override devise invitable actions如何覆盖设计邀请动作
【发布时间】:2013-08-12 15:33:47
【问题描述】:

我在我的应用程序中使用了 devise-invitable gem。如果用户存在于应用程序中并且他点击接受邀请链接,他应该被重定向到登录页面,如果新用户点击链接,他应该被重定向到注册页面。我不知道如何覆盖 after_accept_path_for 方法...我可以在哪里以及如何覆盖此方法,有人可以帮助我吗? 关注https://github.com/scambra/devise_invitable/链接

【问题讨论】:

    标签: devise ruby-on-rails-3.2 devise-invitable


    【解决方案1】:

    我认为您可能想重新阅读文档,您的问题已在文档中得到解答,但并非全部集中在一个地方。

    以下是与您的问题相关的两个部分: https://github.com/scambra/devise_invitable#configuring-controllers https://github.com/scambra/devise_invitable#integration-in-a-rails-application

    基本上,您将为邀请添加一个控制器并为该控制器添加路由信息 (app/controllers/users/invitations_controller.rb),如下所示:

    class Users::InvitationsController < Devise::InvitationsController
      def after_accept_path_for
        "some path you define"
      end
    end
    

    然后您将更改您的 routes.rb 以告诉 devise 使用您的邀请控制器,例如:

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

    【讨论】:

    • 感谢您的帮助...做了同样的事情....但是在单击接受邀请链接后,我被重定向到 Devise::InvitationsController#edit。在这里,我得到了设置密码的表单,我不想要它....如果用户存在于应用程序中,我想重定向到登录页面,否则到注册页面...我不知道该怎么做。 ..
    • 有人可以帮我吗
    • 通过覆盖设计邀请的编辑操作解决了这个问题。
    【解决方案2】:

    使用 devise 2.1.2 和 devise_invitable 1.1.8,从邀请链接设置密码后最终进入的页面取决于您在 config/routes.rb 中为设计资源设置的根路径,所以@trh 的回答不适用于此版本(我尝试过但失败了)。来自设计代码 cmets:

      # The default url to be used after signing in. This is used by all Devise
      # controllers and you can overwrite it in your ApplicationController to
      # provide a custom hook for a custom resource.
      #
      # By default, it first tries to find a valid resource_return_to key in the
      # session, then it fallbacks to resource_root_path, otherwise it uses the
      # root path. For a user scope, you can define the default url in
      # the following way:
      #
      #   map.user_root '/users', :controller => 'users' # creates user_root_path
      #
      #   map.namespace :user do |user|
      #     user.root :controller => 'users' # creates user_root_path
      #   end
      #
      # If the resource root path is not defined, root_path is used. However,
      # if this default is not enough, you can customize it, for example:
      #
      #   def after_sign_in_path_for(resource)
      #     stored_location_for(resource) ||
      #       if resource.is_a?(User) && resource.can_publish?
      #         publisher_url
      #       else
      #         super
      #       end
      #   end
    

    在我的例子中,我有两个不同的命名空间,其中一个命名空间名为“portal”,我为用户使用了一个“PortalUser”类。对于 Rails 3.2,我只是在 routes.rb 中声明了这一行:

    get "portal" => 'portal/dashboard#index', as: :portal_user_root
    

    重要的是命名,“portal_user_root”是PortalUser类名的下划线名称。只需设置此命名路由即可让您的 devise_invitable 根据需要进行重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2013-11-30
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多