2011-03-06 50 views

回答

26

當然,只是比較了兩個類:

if Admin < ActiveRecord::Base 
    # ... 
end 

這是值得注意的是,雖然Module#<將從AR::Base返回true如果Admin繼承,它將返回falsenil如果這不是案子。 false意味着它是另一回事,而nil是用於無關的類(例如String < Range返回nil)。

+1

+1這很漂亮。 – 2011-03-06 18:58:33

+0

Ups,太晚了:-) – 2011-03-06 19:00:25

+2

如果你正在尋找文檔,碰巧類class是從Module派生的,所以:http://www.ruby-doc.org/core-1.8.7/class /Module.html#M000206 – DigitalRoss 2011-03-06 19:15:19

3
Admin.ancestors.includes? ActiveRecord::Base 

對於直接祖先,你也可以使用

Admin.superclass == ActiveRecord::Base 
+0

這會起作用,但效率不高,因爲它會生成一個所有祖先的數組,然後遍歷它尋找'ActiveRecord :: Base'。 – 2011-03-06 19:02:22

+0

啊,只是讀了源代碼,它創建了一個效率稍低的新紅寶石數組。雖然它具有稍微易於閱讀的好處(找出「這段代碼做了什麼?」)。 – 2011-03-06 19:06:37

7

這很簡單:

Admin < ActiveRecord::Base 
=> true 
+0

我喜歡這個,因爲class'Class'是從'Module'派生的。 http://www.ruby-doc.org/core-1.8.7/classes/Module.html#M000206 – DigitalRoss 2011-03-06 19:13:13

相關問題