2011-10-24 7 views
1

私は、スイッチ/ケースを交換するためのRuby on Railsの設計をどのように構築するのかと思いました。バリデータパターンの書き方は?

switch (needle) { 
     case 'hello' : 
      // some operation 
      return "something" 
      break; 

     case 'world' : 
      // some operation 
      return "something" 
      break; 

     default : 
      return "default"; 
      break; 
    } 

バリデータを表す別のクラスを考えています。これのためのパターンはありますか?

class hello 
    def validate 
    // validate something 
    end 
def execute 
    // do something 
    end 
end 

class world 
    def validate 
    // validate something 
    end 
def execute 
    // do something 
    end 
end 

class implementation 
    def main 
    validate(hello, world) 
    end 
end 
+2

もう少し情報が – zsquare

+0

に役立つだろう文字列で異なるものをチェックしたいだけです。例えば。 indexOf()で – fabian

答えて

0

独自のカスタム検証クラスをRailsで作成することができます。 http://juixe.com/techknow/index.php/2006/07/29/rails-model-validators/

あなたのモデルで使用してください。利用されていないパターンもあります

# string with square brackets and a regexp, returning the first match or nil 
"fred"[/d/] 

は、あなたは、これは、文字列の外に物事を引っ張り、メッセージとしてそれらを使用していくつかの楽しみを持つことができますが、この種のものは悪夢することができ、デバッグ警告さ。

実際には、オブジェクトに任意のメッセージを送信しようとしていますか?この場合、send()がそのトリックを行います。

0

次のような何かがあります。ネストされたクラスを使用する

class MyClass 
    def my_method my_valitation_str 
    validator = Validator.from_str validation_str 
    validator.validate 
    end 

    class Validator 
    class Hello 
     def self.str 
     "hello" 
     end 
     def validate 
     ... the hello validation code 
     end 
    end 
    class World 
     def self.str 
     "world" 
     end 
     def validate 
     ... the hello validation code 
     end 
    end 
    def self.validator_types 
     [Hello, World] 
    end 

    def self.from_str val_str 
     validator_types.select{|t| t.str == val_str}.first 
    end 
    end 
end 

をば完全にオプションです。

しかし、ほとんどの場合、クラスを使用する必要はありません。バリデータクラスはモジュールである可能性があります。 from_strはモジュールを直接返すことができます。あなたは正確にやろうとしているもので、実際

、「検証」が返されるモジュールとクラスを拡張できるより、MyClassのインスタンス上で動作するよう意図されている場合...