我需要在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>
答案 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的代码是可以的,只有您自己在混合两种环境