アプリケーションの1つについて、モデル内に検証ロジックを記述しようとしています。組み込みたいロジックは次のようになります。
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
ルビーメソッド内でこれを行うことは可能ですか?
アプリケーションの1つについて、モデル内に検証ロジックを記述しようとしています。組み込みたいロジックは次のようになります。
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
ルビーメソッド内でこれを行うことは可能ですか?
できますよ。ただし、次の2つの点に注意してください。
this == true
の代わりにあなたが意味しているのではないかと思いますthis = true
。and
andor
の代わりに&&
andを使用する場合は、十分に注意してください。||
これらは同等ではありません。rubyの演算子の優先順位を読んでください。これは、PHPなどの他の言語とは微妙に異なります。おそらく、ほとんどの論理ステートメントに固執し、の使用を予約して&&
、などのフローを制御する方がよいでしょう。||
or
and
redirect and return
したがって、具体的な例はおそらく次のようになります。
if this == true || (!that.nil? && those < 1000)
do something
else
do nothing
end
この特定のケースでは、括弧は前にあるので冗長&&
です||
が、害はありません。さらに複雑な場合は、演算子の優先順位の誤解によるあいまいさや微妙なバグを避けるために括弧を使用することをお勧めします。
もちろん、各属性を比較するメソッドのような小さなメソッドを作成し、そのメソッドでそれらを呼び出すことをお勧めします。
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