我正试图更深入地理解Rails引擎的机制,观察设计项目的来源。
您知道,有一个模块Devise::Models
,它为支持身份验证之类的模型定义了一个名为devise
的方法。到目前为止一切都很好。
请参阅https://github.com/plataformatec/devise/blob/master/lib/devise/models.rb
但我很难弄清楚这个模块是如何包含在模型中的。它是自动加载的还是什么的?当我在不使用生成器的情况下创建一个新模型时,地狱设计如何使devise::Models模块可访问,以便我可以直接调用devise :trackable, :stuffable
。
对我来说太黑暗了。任何解释都将不胜感激。
感谢您的阅读。
伙计,我觉得自己很笨。我花了很多小时来找出为什么Devise::Models
模块包含在我的所有模型中,并且我可以在不引发NoMethod错误的情况下调用devise
方法。
最后我找到了答案。
这个模块包含在您的设备安装使用的orm文件中。如果你不改变的话,你可以在初始化器中做这些事情。(选择正确的Orm适配器文件)
然后,包含在问题中的文件(在我的例子中,mongoid.yml
)只做:
require 'orm_adapter/adapters/mongoid'
Mongoid::Document::ClassMethods.send :include, Devise::Models
希望这将激励你们,若你们愿意为你们的发动机提供同样的机制。
问候