设计::模型包含

时间:2013-02-09 16:45:07

标签: ruby-on-rails-3 devise

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

你知道,有一个模块Devise::Models定义了一个名为devise的方法,用于支持身份验证和内容的模型。到目前为止一切都很好。

请参阅https://github.com/plataformatec/devise/blob/master/lib/devise/models.rb

但我很难弄清楚这个模块是如何包含在模型中的。它是自动加载还是什么?当我在不使用生成器的情况下创建新模型时,地狱设计如何使得Devise :: Models模块可以直接调用devise :trackable, :stuffable

这对我来说太黑了。任何解释都将受到高度赞赏。

感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

伙计,我觉得很蠢。我花了这么多时间来找出为什么Devise::Models模块包含在我的所有模型中,我可以调用devise方法而不会引发NoMethod错误。

最后我找到了答案。

此模块包含在您的设备安装使用的orm文件中。你在初始化程序中执行这些操作,如果你没有改变它。 (选择正确的Orm适配器文件)

然后,问题所包含的文件(在我的情况下,mongoid.yml)只会这样做:

require 'orm_adapter/adapters/mongoid'

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

希望如果您为引擎提供相同的机制,这将激励您。

此致