доступ к current_user в консоли rails - PullRequest
0 голосов
/ 25 августа 2018

Мне нужен доступ к атрибуту current_user в консоли rails, у меня установлен гем pry, но я не знаю, как его использовать для входа в систему пользователя

Я также пытался

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 голосов
/ 25 августа 2018

когда вы говорите «консоль rails», вы имеете в виду запуск ее автономно с «консолью rails», или вы имеете в виду консоль, отображаемую при использовании binding.pry в вашем коде, когда исключение останавливается и позволяет вам взаимодействовать с текущим запросом?

вы не можете установить current_user из автономной консоли, как сказал @max, потому что это концепция, связанная с запросами и сессиями

вы сможете войти в систему пользователя, если говорите оконсоль, которая останавливает текущее исключение запроса, используя binding.pry, я предполагаю, что вы используете devise, и этот код для sign_in будет в порядке, только если вы смешиваете два контекста

0 голосов
/ 25 августа 2018

Общая концепция «текущего пользователя» неприменима при использовании консоли.

Консоль в отличие от того, когда вы запускаете сервер rails, фактически не отвечает на запросы http.Он просто загружает ключевые компоненты фреймворка, чтобы вы могли поиграть с ним.

Поскольку нет HTTP-запроса, нет аутентификации на основе сеанса или токена.Таким образом, на самом деле нет пользователя, взаимодействующего с системой, которая отображает весь концептуальный вопрос.

Pry

Драгоценный камень pry является альтернативной консолью по умолчанию для рубина irb.

Его можно использовать для установки «интерактивных точек останова» в коде, чтобы вы могли остановить выполнение на сервере и проверить переменные.

Итак, допустим, у вас есть:

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

Когда вы запрашиваете http://localhost:3000/ через браузер, страница не будет загружаться.

Если вы переключитесь обратно на консоль, где вы запускаете сервер rails, вы заметите, что есть интерактивная подсказка.Как только вы закроете приглашение (с помощью exit или ctrl + d), ответ будет отправлен в браузер.

Драгоценный камень byebug похож, но создает интерактивный терминал на стандартной странице ошибок rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...