在Rails控制台中访问current_user

时间:2018-08-25 14:12:04

标签: ruby-on-rails session

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

我也尝试过

user = User.find(1)
sign_in user

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

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>

2 个答案:

答案 0 :(得分:2)

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

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

由于没有HTTP请求,因此没有基于会话或令牌的身份验证。因此,实际上没有用户与呈现整个概念的系统进行交互。

pry宝石是默认红宝石irb的替代控制台。

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

所以说你有:

class PagesController
  # GET /
  def home
    binding.pry
  end
end

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

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

byebug宝石类似,但在标准的rails错误页面上创建了一个交互式终端。

答案 1 :(得分:0)

当您说“ rails console”时,是指使用“ rails console”独立运行它,还是指在代码中使用binding.pry并且执行停止并允许您与当前请求进行交互时显示的控制台?

您不能通过@max这样的独立控制台设置current_user,因为这是与请求和会话相关的概念

如果您正在谈论使用in binding.pry停止当前请求执行的控制台,您应该能够登录用户。我猜您正在使用devise,并且sign_in的代码是可以的,只有您自己在混合两种环境