-1

私は現在、Tumblr API を使用しており、さまざまな種類の投稿 (テキスト、写真、ビデオ、引用、リンクなど) があります。1 つの親クラス 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 に答える