我试图理解下面的 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']?
谢谢