0

アプリケーションの1つについて、モデル内に検証ロジックを記述しようとしています。組み込みたいロジックは次のようになります。

def validation
    if this == true or (!that.nil? and those < 1000)
       do something
    else
       do nothing
end

ルビーメソッド内でこれを行うことは可能ですか?

4

2 に答える 2

3

できますよ。ただし、次の2つの点に注意してください。

  • this == trueの代わりにあなたが意味しているのではないかと思いますthis = true
  • andandorの代わりに&&andを使用する場合は、十分に注意してください。||これらは同等ではありません。rubyの演算子の優先順位を読んでください。これは、PHPなどの他の言語とは微妙に異なります。おそらく、ほとんどの論理ステートメントに固執し、の使用を予約して&&、などのフローを制御する方がよいでしょう。||orandredirect and return

したがって、具体的な例はおそらく次のようになります。

 if this == true || (!that.nil? && those < 1000)
   do something
 else
   do nothing
 end

この特定のケースでは、括弧は前にあるので冗長&&です||が、害はありません。さらに複雑な場合は、演算子の優先順位の誤解によるあいまいさや微妙なバグを避けるために括弧を使用することをお勧めします。

于 2012-12-05T16:01:29.503 に答える
1

もちろん、各属性を比較するメソッドのような小さなメソッドを作成し、そのメソッドでそれらを呼び出すことをお勧めします。

def validation
  if this? or others?
    #do something
  else
    #do nothing
  end
end

private

def others?
  that? and those?
end

def this?
  this == true
end

def that?
  that != nil
end

def those?
  those < 1000
end
于 2012-12-05T16:04:48.660 に答える