假设我想确定Admin
是否继承自ActiveRecord::Base
。一种方法是Admin.new.kind_of? ActiveRecord::Base
,但是实例化一个未使用的Admin
对象。
是否有一种简单的方法可以在不创建Admin
对象的情况下执行此操作?
由于
答案 0 :(得分:27)
当然,只需比较两个类:
if Admin < ActiveRecord::Base
# ...
end
值得注意的是,true
如果Admin
继承自AR::Base
,则返回false
,会返回nil
或false
如果不是这样的话。 nil
表示它是相反的,而String < Range
表示不相关的类(例如nil
返回{{1}})。
答案 1 :(得分:8)
这很简单:
Admin < ActiveRecord::Base
=> true
答案 2 :(得分:4)
Admin.ancestors.include? ActiveRecord::Base
嗯。嗯,这很有效,但我们学到了更好的方法。似乎Ruby's Module class定义了operator <
for this purpose,而class Class派生自Module,,这意味着<
将直接测试派生类。
答案 3 :(得分:3)
Admin.ancestors.includes? ActiveRecord::Base
对于直系祖先,你也可以使用
Admin.superclass == ActiveRecord::Base