gpt4 book ai didi

ruby-on-rails - Rails : DoubleRenderError - "Render and/or redirect were called multiple times in this action"

转载 作者:行者123 更新时间:2023-12-04 13:20:01 27 4
gpt4 key购买 nike

我想通过用户的role_ids进行重定向:

  • 如果等于2,则重定向到workers_path
  • 如果等于1,则重定向到tasksadmins_path

  • 我定义了以下内容:
    class ApplicationController < ActionController::Base
    include ApplicationHelper

    protect_from_forgery
    before_filter :authenticate_user!

    def stored_location_for(user)
    nil
    end

    def after_sign_in_path_for(user)
    if current_user.role_ids == [2]
    return redirect_to(workers_path)
    else
    return redirect_to (tasksadmins_path)
    end
    end
    end

    但是登录时出现错误:
    AbstractController::DoubleRenderError in UserSessionsController#create

    Render and/or redirect were called multiple times in this action. Please note
    that you may only call render OR redirect, and at most once per action. Also
    note that neither redirect nor render terminate execution of the action, so
    if you want to exit an action after redirecting, you need to do something
    like "redirect_to(...) and return".
    Rails.root: /home/alon/alon/todolist

    Application Trace | Framework Trace | Full Trace
    app/controllers/user_sessions_controller.rb:5:in `create'
    Request

    Parameters:

    {"utf8"=>"✓",
    "authenticity_token"=>"jRNZkIXvToEhl9YVxaQoa2hLJiSaHI6JAdfpUNAQMJI=",
    "user"=>{"email"=>"worker216@gmail.com",
    "password"=>"[FILTERED]",
    "remember_me"=>"0"},
    "commit"=>"Sign in"}

    这是我的 user_session_controller.rb:
    class UserSessionsController < Devise::SessionsController
    include ApplicationHelper

    def create
    response = super

    require "uri"
    require "net/http"

    ## get the user id from the database
    user_id = session['warden.user.user.key'][1][0];

    ## get the row by id
    user = User.find(user_id)

    # ============================
    # Ensure that a user exists
    # ============================

    code, body = http_request(Net::HTTP::Put.new("/api/v1/users/external/#{user_id}"), email: user.email);
    if code != 200
    Rails.logger.error("Unable to register user #{current_user.email} at Licensario");
    end

    response
    end
    end

    这是我的 routes.rb:
    TODOLIST::Application.routes.draw do

    devise_for :users, :controllers => { :sessions => 'user_sessions'} do
    get '/users/sign_out' => 'devise/sessions#destroy'
    end

    resources :tasksadmins
    resources :workers
    root to: "workers#index"
    end

    最佳答案

    您不应该在redirect_to中返回after_sign_in_path_for。您应该返回网址:

      def after_sign_in_path_for(user)
    if current_user.role_ids == [2]
    return workers_url
    else
    return tasksadmins_url
    end
    end

    关于ruby-on-rails - Rails : DoubleRenderError - "Render and/or redirect were called multiple times in this action",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670585/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com