0

我的模型中有一个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

为什么会这样?

4

3 回答 3

3

问题是,您已经在数组(MultipleChoice类)中有一个类。当你问Question.descendants.first你得到那MultipleChoice门课时。

但是,您要求Question.descendants.first**.class**. 的类MultipleChoiceClass

Class成为班级是MultipleChoice完全可以的。看看 ruby​​ 元模型作为参考:

ruby 元模型图

图片来源:http ://sermoa.wordpress.com/2011/06/19/ruby-classes-and-superclasses/

于 2013-07-30T15:29:02.643 回答
0

方法返回的数组中有MultipleChoice类而不是实例descendants。这是因为您使用ObjectSpace.each_object了 withClass参数,它返回类,因为它们的类是Class.

于 2013-07-30T15:29:12.880 回答
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

于 2013-07-30T15:33:43.143 回答