使用嵌套的if语句检查用户模型变量

时间:2014-02-04 09:17:33

标签: ruby-on-rails ruby if-statement

我尝试使用一系列嵌套的if语句检查我的用户模型。我有两个模型,用户has_many :taxes和税率belongs_to :user。在用户表的一列中,每个用户都有一个特定的状态ID"他们在注册时选择的内容(例如,state_id: 53可能意味着加利福尼亚州)。无论如何,在我的Tax模型中,我有几个if语句,用于评估用户是否来自特定区域,如果为true,则执行if中的条件。

例如:

if user_state_id == 53
   # Do this
end

问题是,如果用户与第一个if语句不匹配,则它不会继续检查剩余的语句,看它是否与其他语句匹配。 (见下文)。如果此用户的state_id为53,则它将正常工作并运行其余条件。但是,如果用户的state_id为52(列表中的下一个),则不会评估。

def provincial
  if user.state_id == 53 #BC
    if calculation = self.income <= 10276
      return 0
    elsif calculation = self.income > 10276 && self.income <= 37568
      return self.income * 0.0506
    end
  end
  if user.state_id == 52 #AB
    if calculation = self.income <= 17593
      return 0
    elsif calculation = self.income < 17593
      return self.income * 0.10
    end
  end
  if user.state_id == 60 #ON
    if calculation = self.income <= 9574
      return 0
    elsif calculation = self.income > 9574 && self.income <= 39723
      return self.income * 0.0505
    end
  end
end

我还尝试使用elsif语句进行主要嵌套条件检查(elsif user.state_id == 52...),但这也不起作用。

2 个答案:

答案 0 :(得分:0)

state_id == 52的嵌套if语句中,您检查两次收入是否小于17593(if和elseif)。

if user.state_id == 52 #AB
  if calculation = self.income <= 17593
    return 0
  elsif calculation = self.income < 17593 # shouldn't it be > 17593?
    return self.income * 0.10
  end
end

此外,您没有涵盖所有案件!如果state_id等于53,并且收入大于37568,则返回nil。

另一件事,如果你签到了self.income <= 10276(自我不需要btw)的陈述,你不需要再次在elsesif(elseif self.income > 10276)中重新检查它。没有其他选择。

您的计算变量已完全过时 - 如果为真,则返回函数,并在其为假时继续。

答案 1 :(得分:0)

我只是使用nested case语句发布了对代码的评论。语法错误(如果有的话)

case user.state_id

when 53     #BC

      case calculation
       when <=10276
       return 0
       when 10277..37568
       return self.income * 0.0506

when 52     #AB
       case calculation
       when 17593
       return 0
        when < 17593
        return self.income * 0.10

when 60     #ON
         case calculation
         when <= 9754
         return 0
         when 9575..39793
         return self.income * 0.0505

希望它有所帮助!