我在我的应用程序中使用了 devise-invitable gem。如果用户存在于应用程序中并且他单击接受邀请链接,则应将其重定向到登录页面,如果新用户单击该链接,则应将其重定向到注册页面。我不知道如何覆盖 after_accept_path_for 方法...我可以在哪里以及如何覆盖此方法,有人可以帮我吗?按照https://github.com/scambra/devise_invitable/链接
2 回答
我认为您可能想重新阅读文档,您的问题已在文档中得到解答,而不是全部在一个地方。
以下是与您的问题有关的两个部分: 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' }
使用 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 根据需要进行重定向。