gpt4 book ai didi

ruby-on-rails - Rails Devise current_user 在匹配项中未定义?高级路由约束

转载 作者:行者123 更新时间:2023-12-03 16:12:37 24 4
gpt4 key购买 nike

我收到一个错误 NameError (undefined local variable or method "current_user" for #<APIRouter:0x007ffd54a81f98>):当我尝试在 中使用 current_user 时火柴? 约束。我希望某些虚拟用户被路由到一组 Controller ,而其他用户被路由到另一组 Controller 。但是,当我尝试使用 current_user 时出现错误。

  • 设计 (2.0.4)
  • rails (3.2.2)

  • 我的匹配约束在 APIRouter 类中定义:
    class APIRouter
    def matches? request
    @use_rm_app = ENV["USE_RM_APP"] == "true" || (current_user && current_user.is_test)
    end
    end

    关于如何在比赛中使用当前用户的任何想法? Rails guide 中定义的约束.

    来自 routes.rb 文件的部分:
    #  Route to the rm_app controller if APIRouter says we should, otherwise use the real backend controllers.
    match '/api/v1/*path', :controller => 'api/v1',
    :action => 'handle_create_request',
    :via => :post, :constraints => APIRouter.new

    更新:感谢 ksol 解决。 尝试 3 有效。获取用户使用 request.env["warden"].user(:user)
    解决办法是修改APIRouter
      def matches? request
    user = request.env["warden"].user(:user)
    (user && user.is_test) || ENV["USE_RM_APP"] == "true"
    end

    最佳答案

    current_user仅在您的 Controller 和 View 中可用。有不止一种方法可以实现您想要的功能,将其作为参数提供给您的方法越容易。

    编辑

    如果 current_user如果可以在路由器中访问,您可以通过执行 constraints: APIRouter.new(current_user) 将其传递给您的约束类。 .那么你需要定义APIRouter#initialize并将 current_user 存储在您可以在 matches? 中使用的实例 var 中.

    编辑 2

    我只记得设计允许您在路由器中执行此操作:

    authenticated :user do
    root :to => "main#dashboard"
    end

    我不知道如何确保 user.is_test尽管。

    编辑 3

    最后一次尝试。 request.env["warden"].user(:user)如果一个用户经过身份验证,应该给你一个用户。

    关于ruby-on-rails - Rails Devise current_user 在匹配项中未定义?高级路由约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12589061/

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