0

我正在尝试更深入地了解 Rails 引擎机制,并查看设计项目的来源。

你知道,有一个模块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 回答