我正在尝试更深入地了解Rails引擎机制,观察设计项目的来源。
你知道,有一个模块Devise::Models
定义了一个名为devise
的方法,用于支持身份验证和内容的模型。到目前为止一切都很好。
请参阅https://github.com/plataformatec/devise/blob/master/lib/devise/models.rb
但我很难弄清楚这个模块是如何包含在模型中的。它是自动加载还是什么?当我在不使用生成器的情况下创建新模型时,地狱设计如何使得Devise :: Models模块可以直接调用devise :trackable, :stuffable
。
这对我来说太黑了。任何解释都将受到高度赞赏。
感谢您的阅读。
答案 0 :(得分:0)
伙计,我觉得很蠢。我花了这么多时间来找出为什么Devise::Models
模块包含在我的所有模型中,我可以调用devise
方法而不会引发NoMethod错误。
最后我找到了答案。
此模块包含在您的设备安装使用的orm文件中。你在初始化程序中执行这些操作,如果你没有改变它。 (选择正确的Orm适配器文件)
然后,问题所包含的文件(在我的情况下,mongoid.yml
)只会这样做:
require 'orm_adapter/adapters/mongoid'
Mongoid::Document::ClassMethods.send :include, Devise::Models
希望如果您为引擎提供相同的机制,这将激励您。
此致