-1

我现在正在使用 Tumblr API,他们有各种类型的帖子(文本、照片、视频、引用、链接等)。我想创建一个父类 TumblrPost,然后创建一堆子类,例如 TumblrTextPost。如果我这样做,是否有办法通过 TumblrPost(即 TumblrPost.all.each)访问每个帖子而不考虑子类?(注意:我正在使用 MongoDB 和 Mongoid)

或者我应该让每个子类成为一个模块,然后只做 TumblrPost 类包括 TumblrTextPost 等?

4

1 回答 1

1

我不确定您是在谈论访问每个 TumblrPost 实例还是每个 TumblrPost 子类。

如果要访问每个实例,可以在 TumblrPost 中设置一个类实例变量,并在构造函数中使用每个新实例进行更新:

class TumblrPost
  @all_instances = []

  class << self
    attr_accessor :all_instances
  end

  def initialize
    TumblrPost.all_instances << self
  end
end

TumblrTextPost = Class.new(TumblrPost)

t1 = TumblrPost.new
t2 = TumblrTextPost.new

puts TumblrPost.all_instances

另一方面,如果您希望能够遍历 TumblrPost 的每个子类,则可以使用继承的钩子来跟踪它们。

class TumblrPost
  @all_subclasses = []

  class << self
    attr_accessor :all_subclasses
  end

  def self.inherited(subclass)
    @all_subclasses << subclass
  end
end

TumblrTextPost = Class.new(TumblrPost)
puts TumblrPost.all_subclasses

资料来源:Russ Olsen 的Eloquent Ruby

于 2012-07-19T00:12:24.163 回答