我得到了下面的耙子任务,每天运行一次,在我的申请中解决一些赌注。但我很确定它可以被简单地做出,所以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
.

所以你可能几乎可以用一个陈述做整个东西,虽然是用测试编织。:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top