我正在观察devise项目的源代码,试图更深入地了解Rails引擎的机制。
你知道,有一个模块Devise::Models,它为模型定义了一个名为devise的方法,它将支持身份验证和其他东西。到目前为止一切都很好。
请参阅https://github.com/plataformatec/devise/blob/master/lib/devise/models.rb
但我很难弄清楚这个模块是如何包含在模型中的。是自动加载的还是怎么的?当我在不使用生成器的情况下创建一个新模型时,地狱设备如何使Devise::Models模块可访问,以便我可以直接调用devise :trackable, :stuffable。
这对我来说是很黑暗的。任何解释都将不胜感激。
感谢您的阅读。
发布于 2013-02-12 20:57:24
天啊,我觉得自己很傻。我花了很多时间来弄清楚为什么我的所有模型中都包含了Devise::Models模块,而且我可以调用devise方法而不会引发NoMethod错误。
我终于找到了答案。
此模块包含在您的devise安装使用的orm文件中。如果你没有改变它,你可以在你的初始化器中做这些事情。(选择正确的Orm适配器文件)
然后,包含在问题中的文件(在我的例子中是mongoid.yml)简单地执行以下操作:
require 'orm_adapter/adapters/mongoid'
Mongoid::Document::ClassMethods.send :include, Devise::Models如果你愿意为你的引擎提供同样的机制,希望这能激励你。
问候
https://stackoverflow.com/questions/14790289
复制相似问题