2013-02-09 115 views
0

我想更深入地了解Rails引擎机制,看设计项目的来源。设计::模型包含

你知道,那个模块Devise::Models定义了一个名为devise的方法,用于支持认证和内容的模型。迄今为止都很好。

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

但很难给我找出这个模块是如何纳入模型。它是自动加载还是其他?当我创建一个不使用生成器的新模型时,地狱设计如何使Devise :: Models模块可访问,以便我可以直接调用devise :trackable, :stuffable

对我来说这只是黑暗。任何解释将不胜感激。

谢谢您的阅读。

+0

给一些进一步的细节,我想使发动机,我想做出这样设计的'设计方法:可追踪的,:rememberable'这将是适合我的主机项目的模型 – Codii 2013-02-09 22:34:05

回答

0

男人,我觉得很愚蠢。我花了好几个小时才知道为什么Devise::Models模块被包含在我的所有模型中,并且我可以调用devise方法而不会引发NoMethod错误。

最后我找到了答案。

该模块包含在您的设计安装使用的orm文件中。如果您没有在初始化程序中更改它,则会执行此操作。 (选择正确的奥姆适配器文件)

然后包括有问题的文件(在我的情况,mongoid.yml)简单地做:

require 'orm_adapter/adapters/mongoid' 

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

希望,如果你愿意,这将激励你为你的引擎提供同样的机制。

问候