1

我试图理解下面的 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 创建的,并由 Router 传递给 MyController 对象。正确的?

这个 MyController 对象继承自 ApplicationController,因此继承了它的属性;反之则不然:ApplicationController 无权访问 MyController 属性。正确的?

如果 ApplicationController 需要一个模块,它会通过模块中的方法扩展其属性。因此,这些“必需”方法无法访问 MyController 属性,在当前情况下是请求对象。正确的?

我在哪里失败了,所以模块 Authenticable 中的方法 current_user 可以访问 request.headers ['Authorization']?

谢谢

4

1 回答 1

0

包含一个模块可以添加实例方法,并且这些方法可以具有各种可见性(私有公共受保护)。

您包含的模块可能有一个公共方法,该方法在您的控制器中可见。

于 2015-06-15T09:23:07.507 回答