0

Rails エンジンの仕組みをより深く理解しようと、devise プロジェクトのソースを調べています。

認証などをサポートするモデルに対してDevise::Models呼び出されるメソッドを定義するモジュールがあります。deviseこれまでのところすべて順調です。

https://github.com/plataformatec/devise/blob/master/lib/devise/models.rbを参照してください

しかし、このモジュールがモデルにどのように含まれているかを理解するのは難しいです。それはオートロードか何かですか?ジェネレーターを使用せずに新しいモデルを作成するとき、地獄のデバイスがアクセス可能な Devise::Models モジュールを作成して、直接呼び出すことができるようにしますdevise :trackable, :stuffable

それは私には暗いです。どんな説明でも大歓迎です。

読んでくれてありがとう。

4

1 に答える 1

0

男、私は愚かだと感じます。Devise::Modelsモジュールがすべてのモデルに含まれている理由を見つけるために非常に多くの時間を費やしdevise、NoMethodエラーを発生させることなくメソッドを呼び出すことができました。

ついに答えを見つけました。

このモジュールは、デバイスのインストールで使用されるormファイルに含まれています。これを変更しなかった場合は、イニシャライザでこれを行います。(適切なOrmアダプターファイルの選択)

次に、問題に含まれているファイル(私の場合mongoid.yml)は単純に次のようになります。

require 'orm_adapter/adapters/mongoid'

Mongoid::Document::ClassMethods.send :include, Devise::Models

エンジンに同じメカニズムを提供するのであれば、これがあなたに刺激を与えることを願っています。

よろしく

于 2013-02-12T12:57:23.840 に答える