我必须创建用于设置基于多个条件的日期状态的逻辑。我从创建多个if else语句开始,但感觉不对。请帮助正确的方法。
select max(velocity) from taxidatabase
由于
答案 0 :(得分:2)
def set_status_of_day(late_policy, early_departure_policy)
case [late_policy.warning_on_late, early_departure_policy.warning_on_late]
when ["Half Day", "Half Day"] then "Absent"
when ["Half Day", "Present"], ["Half Day", "Early Departure"], ["Late", "Early Departure"] then "Half Day"
when ["Present", "Present"] then "Present"
.
.
.
end
end
我添加了像Cary Swoveland在评论中提到的第二个时间线。 when子句中的逗号就像or-conjuction一样。 请参阅mors信息文档中的case。
答案 1 :(得分:1)
只是一个更大的解决方案,但也许它会有所帮助
KEYS = {
"Half Day" => 0,
"Present" => 1,
"Early Departure" => 2,
"Late" => 3
}
STATUSES = [
{ keys: [[0, 0]], value: "Absent" },
{ keys: [[0, 2], [2, 3], [0, 1]], value: "Half Day" },
{ keys: [[1, 1]], value: "Present" }
]
def status(late_warning, early_warning)
result = STATUSES.find { |status| status[:keys].include? [KEYS[late_warning], KEYS[early_warning]] } || { value: 'Unknown'}
result[:value]
end
# For example:
# status("Half Day", "Half Day")
#=> "Absent"
#
# status("Half Day", "Half D")
#=> "Unknown"
def set_status_of_day(late_policy,early_departure_policy)
self.status_of_day = status(late_policy.warning_on_late, early_departure_policy.warning_on_late)
end
答案 2 :(得分:1)
您可以指定值(0表示当天开始,1表示当天结束,...)并计算当天的长度(接近0表示“缺席”,接近1表示“存在”)
@morning_hash = {
"Present" => 0.0,
"Late" => 0.25,
"Half Day" => 0.5,
}
@afternoon_hash = {
"Half Day" => 0.5,
"Early" => 0.75,
"Present" => 1.0,
}
def duration_description(morning, afternoon)
duration = @afternoon_hash[afternoon]-@morning_hash[morning]
case duration
when 0...0.25 then "Absent"
when 0.25..0.75 then "Half Day"
when 0.75..1.0 then "Present"
end
end
puts duration_description("Half Day", "Half Day") == "Absent"
puts duration_description("Half Day", "Present") == "Half Day"
puts duration_description("Half Day", "Early") == "Half Day"
puts duration_description("Late", "Early") == "Half Day"
puts duration_description("Present", "Present") == "Present"
#=> true true true true true
〜