Ruby逻辑和/或链

时间:2012-12-05 15:54:05

标签: ruby-on-rails ruby validation logic

我正在尝试为我的一个应用程序在模型中编写一些验证逻辑。我想构建的逻辑看起来像这样。

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

是否可以在ruby方法中执行此操作?

2 个答案:

答案 0 :(得分: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

在这种特殊情况下,括号是多余的,因为&&||之前,但它们没有受到伤害,对于任何更复杂的事情,使用它们来避免歧义和微妙是一种好习惯。由于误解了运算符优先级而导致的错误。

答案 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