如何在Rails中找出哪个模块是mixin?

时间:2011-07-17 18:37:26

标签: ruby-on-rails ruby

我是一个新的Ruby / Rails人。这是一个令我困惑的问题:

我们可以从API文档中找到Rails中类的确切模块列表吗?例如,如果我们有一个ActiveRecord :: Base子类的实例,我们可以在这个类中使用validates方法,如下所示:

class Product < ActiveRecord::Base
  has_many :line_items
  validates :title, :description, :image_url, :presence => true
end
从rails api doc

我们可以发现validate属于ActiveModel :: Validations :: ClassMethods,所以ActiveRecore :: Base必须有ActiveModel :: Validations :: ClassMethods mixin,但我没有找到任何与此有关的内容。 api参考。任何人都可以告诉我,我是否可以从api doc找到这些信息?

提前感谢您的所有帮助。我真的希望我的问题听起来不太愚蠢:)。

3 个答案:

答案 0 :(得分:9)

在控制台中:

ActiveRecord::Base.included_modules

答案 1 :(得分:3)

在我见过的任何Rails文档中都没有看到类似内容:

使用猴子修补,可能没有任何方法可以知道,直到Rails全部启动并且你手中有一个真正的ActiveRecord :: Base;例如,PostgreSQL,MySQL和SQLite适配器重新打开ActiveRecord :: Base,它们可能包含额外的模块;你正在使用的其他宝石,甚至你自己的代码都可以做类似的事情。

如果您只想知道标准的mixin集,请使用源代码(Luke!)或按照maniek的建议进行操作,并在Rails控制台中询问ActiveRecord :: Base。

一般来说,Rails API文档没有用,除非你已经知道你在寻找什么,即使这样,通常也需要深入挖掘源代码。

您最好的选择是检查guides您需要什么,如果不起作用,请阅读来源。


简答:您无法从文档中获取列表,因为直到运行时才能知道模块。如果您需要了解某些内容,请阅读guides和来源。

答案 2 :(得分:1)

简短的回答是,你不能。

长答案仅仅是一个借口(糟糕的):Ruby和Rails文档是从源头自动生成的。而Ruby因其元编程能力而臭名昭着,因此无法通过解析源(轻松)提取方法包含在类中的事实。获取类中方法列表的唯一可靠方法是启动控制台并键入SomeVeryImportantClass.methods

也就是说,对于新手和有经验的开发人员来说,真的令人沮丧和沮丧,因为人们无法在文档中轻易找到一些最常用的方法。令人失望的是,有人没有想到某种方式以某种方式包含这些交叉引用,甚至可能手动。