我正在尝试为我的一个应用程序在模型中编写一些验证逻辑。我想构建的逻辑看起来像这样。
def validation
if this == true or (!that.nil? and those < 1000)
do something
else
do nothing
end
是否可以在ruby方法中执行此操作?
答案 0 :(得分:3)
当然可以。但是,有两点需要注意:
this == true
而不是this = true
。 and
和or
代替&&
和||
时要非常小心 - 它们 等效。阅读operator precedence in ruby,它与其他语言(例如PHP)略有不同。对于大多数逻辑语句,您最好坚持使用&&
和||
,并保留使用or
和and
来控制流量,例如redirect and return
所以你的具体例子应该是这样的:
if this == true || (!that.nil? && those < 1000)
do something
else
do nothing
end
在这种特殊情况下,括号是多余的,因为&&
在||
之前,但它们没有受到伤害,对于任何更复杂的事情,使用它们来避免歧义和微妙是一种好习惯。由于误解了运算符优先级而导致的错误。
答案 1 :(得分: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