简化多个if-then rake任务
-
11-12-2019 - |
题
我得到了下面的耙子任务,每天运行一次,在我的申请中解决一些赌注。但我很确定它可以被简单地做出,所以if-then-then语句可以用s案例分阶段替换。
我假设多个IF语句需要更长的时间才能运行与案例选项相同的进程。是正确的吗?
我只是不确定如何将它从IF-DONT转换为案例选项..
task :settle => :environment do
@bets = Bet.where(:settle => false)
@bets.each do |bet|
if not bet.value.nil?
if bet.price.value > bet.value and bet.buy == true then
bet.profitloss = 10
bet.settle = true
bet.save
end
if bet.price.value < bet.value and bet.buy == false then
bet.profitloss = 10
bet.settle = true
bet.save
end
if bet.price.value > bet.value and bet.buy == false then
bet.profitloss = -10
bet.settle = true
bet.save
end
if bet.price.value < bet.value and bet.buy == true then
bet.profitloss = -10
bet.settle = true
bet.save
end
if bet.price.value = bet.value then
bet.profitloss = -10
bet.settled = true
bet.save
end
end
end
end
. 解决方案
也许您可以实现:
task :settle => :environment do
@bets = Bet.where(:settle => false)
@bets.each do |bet|
if not bet.value.nil?
case
when bet.price.value > bet.value and bet.buy == true
profitloss = 10
when bet.price.value < bet.value and bet.buy == false
profitloss = 10
when bet.price.value > bet.value and bet.buy == false
profitloss = -10
when bet.price.value < bet.value and bet.buy == true
profitloss = -10
when bet.price.value = bet.value
profitloss = -10
end
if profitloss
bet.settled = true
bet.profitloss = profitloss
bet.save
end
end
end
.
拔出结算并保存允许您可以轻松地在需要时融合其他功能,而不会在每个IF或何时复制时复制。
其他提示
似乎是
bet.settle总是真的
BET.Profitloss是-10
除非(bet.price.value> bet.value和bet.buy)或(bet.price.value
从以下真相表
< bet | = bet | > bet | buy || settle || profit
0 | 0 | 1 | 0 || 1 || 0
0 | 0 | 1 | 1 || 1 || 1
0 | 1 | 0 | 0 || 1 || 0
0 | 1 | 0 | 1 || 1 || 0
1 | 0 | 1 | 0 || 1 || 1
1 | 0 | 1 | 1 || 1 || 0
.
所以你可能几乎可以用一个陈述做整个东西,虽然是用测试编织。:)
不隶属于 StackOverflow