Ruby on Rails запрашивает видимость / область видимости объекта
Я пытаюсь понять фрагмент кода Rails ниже, и я не понимаю, как объект запроса с атрибутами заголовка виден внутри метода, определенного в модуле, который требуется ApplicationController.
Соответствующий код:
в контроллерах / application_controller.rb
class ApplicationController < ActionController::Base
...
include Authenticable
...
end
в контроллерах / концернах / authenticable.rb
module Authenticable
def current_user
@current_user = User.find_by( auth_token: request.headers['Authorization'])
end
в контроллерах / my_controller.rb
class MyController < ApplicationController
...
def some_action
user = current_user
...
end
...
end
Насколько я (в настоящее время) знаю, экземпляр объекта запроса создается Rack и передается в объект MyController маршрутизатором. Правильный?
Этот объект MyController происходит от ApplicationController и поэтому наследует его свойства; обратное неверно: ApplicationController не имеет доступа к свойствам MyController. Правильный?
Если ApplicationController требуется модуль, он расширяет свои свойства методами в модуле. Таким образом, эти "обязательные" методы не имеют доступа к свойствам MyController, в данном случае к объекту запроса. Правильный?
Где я терплю неудачу, так что метод current_user внутри модуля Authenticable может получить доступ к request.headers['Authorization']?
Спасибо
1 ответ
Включение модуля может добавлять методы класса и экземпляра, и эти методы могут иметь различную видимость (частная, открытая, защищенная).
Ваш включенный модуль, вероятно, имеет публичный метод, который виден внутри вашего контроллера.