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 ответ

Включение модуля может добавлять методы класса и экземпляра, и эти методы могут иметь различную видимость (частная, открытая, защищенная).

Ваш включенный модуль, вероятно, имеет публичный метод, который виден внутри вашего контроллера.

Другие вопросы по тегам