0

次のコードは、それ自体のどのサブクラスを実行するかを決定するためのものです。ObjectSpace内のすべてを循環してサブクラスを見つけ、そこから正しいサブクラスを実行します。Railsでは、ライブラリフォルダー内のクラスがObjectSpaceにないため、これは機能しません。特定のフォルダーでサブクラスを検索する方法は何ですか?

def execute
  ObjectSpace.each_object(Class).select do |klass|
    if (klass < self.class)
      klass.designations.each do |designation|
        if (designation.downcase.capitalize == @action.downcase.capitalize)
          command = klass.new(@sumo_params)
          command.execute
        end
      end
    end
  end
end

または-この問題に対する優れた解決策がありますか?

4

2 に答える 2

0

これにはモジュールを使用すると思います。したがって、これにより、次のようなコードが作成されます。

lib / base_methods.rb

module BaseMethods

  def self.included(base)
    @@classes_including ||= []
    @@classes_including << base
  end

  def do_whatever
    @@classes_including.each do |class|
      #....
    end
  end

end

lib / class_1.rb

class Class1
  include BaseMethods
end
于 2013-03-07T21:06:43.367 に答える
0

私は今のところ簡単な方法を取りました(文字列値の配列を繰り返します):

def execute
  @descendants.each do |descendant|
    klass = descendant.downcase.capitalize.constantize
    if (klass < self.class)
      klass.designations.each do |designation|
        if (designation.downcase.capitalize == @action.downcase.capitalize)
          command = klass.new(@sumo_params)
          command.execute
        end
      end
    end
  end
end
于 2013-03-08T14:27:31.923 に答える