发送邀请后如何更改重定向路径?

时间:2015-12-02 09:09:05

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

我正在使用Devise Invitable,我在SO(here is one)上找到了一些答案,说我应该在0x0D中指定操作after_invite_path_for(resource)

我试过了,它仍然无法正常工作。

这是我的控制者:

Users::InvitationsController < DeviseController

当我尝试在class Users::InvitationsController < Devise::InvitationsController def after_invite_path_for(resource) root_path end def create @member ||= Member.find_or_create_by(email: params[:user][:email], first_name: get_first_name(params[:user][:full_name]), last_name: get_last_name(params[:user][:full_name]), bio: params[:user][:bio], gender: params[:user][:gender]) @membership ||= Membership.find_or_create_by(member: @member, family_tree: current_user.family_tree, inviter: current_user, relation: params[:user][:invitation_relation]) if @user_exists ||= invited_user_exists(params[:email]) else super end end end 块中的redirect_to root_path之后立即添加super时,它会抛出有关重定向的错误。

我相信这是真的,因为如果您查看create action here的来源,您会看到重定向。

这是服务器日志:

else

请注意,它永远不会重定向到任何地方。

1 个答案:

答案 0 :(得分:0)

我想出来了。无论出于何种原因,在after_invite_path_for(resource)中执行Users::InvitationsController并未覆盖create中的DeviseInvitable#Create操作。

所以,我所做的只是使用官方创建操作中的大多数逻辑,只是在本地更改了重定向。

现在,我在我的控制器中的创建动作如下所示:

def create
  @member ||= Member.find_or_create_by(email: params[:user][:email], first_name: get_first_name(params[:user][:full_name]), last_name: get_last_name(params[:user][:full_name]), bio: params[:user][:bio], gender: params[:user][:gender])
  @membership ||= Membership.find_or_create_by(member: @member, family_tree: current_user.family_tree, inviter: current_user, relation: params[:user][:invitation_relation])

  if @user_exists ||= invited_user_exists(params[:email])

  else
    self.resource = invite_resource
    resource_invited = resource.errors.empty?

    yield resource if block_given?

    if resource_invited
      if is_flashing_format? && self.resource.invitation_sent_at
        set_flash_message :notice, :send_instructions, :email => self.resource.email
      end
      redirect_to root_path, notice: "Invitation Successfully Sent."
    else
      respond_with_navigational(resource) { render :new }
    end
  end

end

有效。它不是设计惯用语......但它适用于我需要的东西。