在 devise 中调用 super 之后的双重渲染

double rendering after super is called in devise

提问人:Jay Enginer 提问时间:5/5/2023 更新时间:5/5/2023 访问量:72

问:

class CustomSessionsController < DeviseTokenAuth::SessionsController

  def create
    binding.pry
    super
    confirmed = true

    binding.pry
    if current_user.present? && confirmed
      render json: { message: "removed" }, status: :ok ("won't render")
    else
      redirect_to new_user_session_url ("won't render")
    end
  end

  def destroy
    super
  end

  private
  
  def after_sign_in_path_for(user)
    redirect_to new_user_session_url
  end

end

是否可以阻止超级渲染,以便其他渲染工作?

我已经尝试过after_sign_in_path_for就像设计推荐一样,但我仍然不断收到双重渲染错误。

与这篇文章类似。

注册后设计重定向:什么是超级

Ruby-on-Rails 路线 设计 超级

答:

0赞 adamdboudreau 5/5/2023 #1

尝试设置 flash.now(:notice) = 'x' 或 flash[:warning] = 'y' 以获得正常渲染结果的 flash[:notice]。

0赞 sajinmp 5/5/2023 #2

您可以将代码复制到此文件,然后从中删除呈现方法。然后,您可以根据流程将其替换为渲染方法。Devise::SessionsController

你要做的就是在这里复制超级的代码并对其进行更改。而不是被调用 super,替换的代码将被执行。