在rails控制台中访问current_user

Rai*_*oon 3 session ruby-on-rails

我需要访问 Rails 控制台中的 current_user 属性,我安装了 pry gem,但我不知道如何使用它来登录用户

我也尝试过

user = User.find(1)
sign_in user
Run Code Online (Sandbox Code Playgroud)

在我的代码中手动登录用户,但这会返回错误

Module::DelegationError: ActionController::Metal#session delegated to @_request.session, but @_request is nil: #<ResumesController:0x0055be48209b10 @_action_has_layout=true, @_routes=nil, @_request=nil, @_response=nil>
Run Code Online (Sandbox Code Playgroud)

max*_*max 5

使用控制台时,“当前用户”的整个概念不适用。

与运行 Rails 服务器时不同,控制台实际上并不响应 http 请求。它只是启动框架的关键功能,以便您可以使用它。

由于没有 HTTP 请求,因此没有基于会话或令牌的身份验证。因此,没有用户实际与系统交互,这使得整个概念毫无意义。

撬

gempry是默认 ruby​​ 的替代控制台irb。

它可用于在代码中设置“交互式断点”,以便您可以停止服务器中的执行并检查变量。

假设你有:

class PagesController
  # GET /
  def home
    binding.pry
  end
end
Run Code Online (Sandbox Code Playgroud)

当您http://localhost:3000/使用浏览器请求时,该页面将不会加载。

如果您切换回运行 Rails 服务器的控制台,您会注意到有一个交互式提示。一旦您关闭提示(使用 exit 或 ctrl + d),响应将发送到浏览器。

gembyebug类似,但在标准 Rails 错误页面中创建交互式终端。

  • 您还必须了解控制台中的不同上下文 - 当您在控制台中时,“self”是 Main(Ruby 全局对象)。当您处于视图或控制器中时,自身就是控制器实例或视图上下文。因此,如果不实例化控制器实例并伪造请求,您将无法在控制器上使用方法(例如“current_user”)。 (2认同)