我的descendants
模型中有一个Question
方法,用于返回从中继承的所有对象。
class Question < ActiveRecord::Base
class << self
def descendants
ObjectSpace.each_object(Class).select do |klass|
klass < self
end
end
end
end
当我调用Question.descendants
时,我会找回一个带有单个对象的数组
[MultipleChoice(id: integer, text: text, scored: boolean, required: boolean, type: string, questionnaire_id: integer, created_at: datetime, updated_at: datetime)]
问题在于,当我致电Question.descendants.first.class
时,我会回复Class
而不是预期的MultipleChoice
。
为什么会这样?
答案 0 :(得分:3)
问题是,你已经在数组中有一个类(MultipleChoice
类)。当你问Question.descendants.first
时,你会得到MultipleChoice
课程。
但是,您要求的是Question.descendants.first**.class**
。 MultipleChoice
的课程为Class
。
将Class
作为MultipleChoice
的类完全正常。看看ruby元模型作为参考:
图片来源:http://sermoa.wordpress.com/2011/06/19/ruby-classes-and-superclasses/
答案 1 :(得分:0)
MultipleChoice
方法返回的数组中有descendants
个类而不是实例。这是因为您使用ObjectSpace.each_object
和Class
参数,它返回类,因为它们的类是Class
。
答案 2 :(得分:0)
[MultipleChoice(id: integer, text: text, scored: boolean, required: boolean, type: string, questionnaire_id: integer, created_at: datetime, updated_at: datetime)]
这不是单个对象的数组。这是一个类似[MultipleChoice]
的数组。当您尝试MultipleChoice.class
时,它会返回Class
。
您的代码中存在创建Question.descendants