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

def*_*cro 9 ruby ruby-on-rails

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

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

class Product < ActiveRecord::Base
  has_many :line_items
  validates :title, :description, :image_url, :presence => true
end
Run Code Online (Sandbox Code Playgroud)

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

感谢您的所有帮助.我真的希望我的问题听起来不太傻:)

man*_*iek 9

在控制台中:

ActiveRecord::Base.included_modules
Run Code Online (Sandbox Code Playgroud)

  • 问题是:"任何人都可以告诉我,我是否可以从api doc`中找到这些信息 (4认同)
  • @apneadiving:也许如果maniek给他的回答加上"不,但你可以在控制台中问......". (2认同)

mu *_*ort 3

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

对于猴子修补,可能没有任何方法可以知道,直到 Rails 全部启动并且您手中有一个实际的 ActiveRecord::Base ;例如,PostgreSQL、MySQL 和 SQLite 适配器重新打开 ActiveRecord::Base,并且它们可能在此过程中包含额外的模块;您正在使用的其他 gem,甚至您自己的代码也可能会执行类似的操作。

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

一般来说,除非您已经知道要查找的内容,否则 Rails API 文档并没有多大用处,即使这样,通常也需要深入研究源代码。

最好的办法是检查指南以了解您需要的内容,如果这不起作用,请阅读源代码。


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