我尝试使用一系列嵌套的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...
),但这也不起作用。
答案 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
希望它有所帮助!