4

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

4

2 回答 2

7

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

以下是与您的问题有关的两个部分: 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_for :users, :controllers => { :invitations => 'users/invitations' }
于 2013-08-12T16:57:30.823 回答
1

使用 devise 2.1.2 和 devise_invitable 1.1.8,从邀请链接设置密码后最终到达的页面取决于您在 config/routes.rb 中为设计资源设置的根路径,因此@trh 的答案不会使用此版本(我尝试过但失败了)。从设计代码注释:

  # 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 根据需要进行重定向。

于 2014-01-16T16:45:27.670 回答