2012-12-05 107 views
0

我想在我的一個應用程序的模型中寫一些驗證邏輯。我想建立的邏輯看起來像這樣。Ruby邏輯和/或鏈

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

是否有可能在ruby方法中做到這一點?

+0

當然;這是正常的條件邏輯。雖然你在那裏有一項任務,但不是檢查平等。另外,請確定你知道'&&'和'和'之間的差異等。 –

+0

非常好!所以使用括號是分組邏輯的有效方法? – capcode01

+0

是的!它甚至建議... – PinnyM

回答

3

當然可以。然而,有兩件事要注意:

  • 我懷疑你的意思是this == true而不是this = true
  • 使用andor代替&&||時要非常小心 - 他們等同。請閱讀operator precedence in ruby,它與其他語言(如PHP)略有不同。對於大多數邏輯語句,您可能最好堅持使用&&||,並保留使用orand來控制流,例如redirect and return

所以,你的具體的例子或許應該是這樣的:

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

在這種特殊情況下,括號是多餘的,因爲&&||,但只要不傷害,以及對任何事情更復雜,使用它們來避免由於誤解操作符優先級而造成的含糊和細微錯誤是一種很好的做法。

+0

完美的謝謝! – capcode01

+0

只需添加一個可能有用的資源:http://api.rubyonrails.org/classes/Object.html – MrYoshiji

+0

'if this == true' should just''if this' – histocrat

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 
+1

像「this?」這樣的方法有什麼意義?它已經是一個布爾值了,「如果這個」和「如果這個?」做同樣的事情。我是一個重構狂熱分子,但這看起來非常極端。 –

+0

好吧,我沒有閱讀任何有關'這'只是一個布爾值。所以我雖然可以有另一個值爲零。 –

+0

然後相同的評論:該方法給你的簡單表達式不是什麼? –