1

以下の Rails コードの一部を理解しようとしていますが、ApplicationController が必要とするモジュールで定義されたメソッド内で、ヘッダーの属性を持つリクエスト オブジェクトがどのように表示されるかわかりません。

関連するコード:

controllers/application_controller.rb 内

class ApplicationController < ActionController::Base
    ...
    include Authenticable
    ...
end

controllers/concerns/authenticable.rb で

module Authenticable

    def current_user
        @current_user = User.find_by( auth_token: request.headers['Authorization'])
    end

controllers/my_controller.rb 内

class MyController < ApplicationController
    ...
    def some_action
        user = current_user
        ...
    end
    ...
end

私が (現在) 知る限り、リクエスト オブジェクト インスタンスは Rack によって作成され、Router によって MyController オブジェクトに渡されます。正しい?

この MyController オブジェクトは ApplicationController から派生しているため、そのプロパティを継承します。その反対は正しくありません。ApplicationController は MyController プロパティにアクセスできません。正しい?

ApplicationController がモジュールを必要とする場合、モジュール内のメソッドによってそのプロパティを展開します。したがって、これらの「必要な」メソッドは MyController プロパティ (現在の場合は request オブジェクト) にアクセスできません。正しい?

モジュール Authenticable 内のメソッド current_user が request.headers['Authorization'] にアクセスできるように、どこで失敗していますか?

ありがとう

4

1 に答える 1

0

モジュールを含めると、クラスメソッドとインスタンスメソッドの両方を追加でき、これらのメソッドはさまざまな可視性 ( privatepublicprotected ) を持つことができます。

含まれているモジュールには、コントローラー内に表示されるpublicメソッドが含まれている可能性があります。

于 2015-06-15T09:23:07.507 に答える