我得到了下面的Rake Task,每天運行一個來解決我的應用程序中的一些賭注。但我很確定它可以簡單化,所以IF-THEN語句可以用CASE語句代替。簡化多個if-then rake任務
我假設多個IF語句運行時間較長,然後使用CASE選項運行相同的進程。那是對的嗎?
我只是不知道如何將它從轉換IF-THEN的CASE選項..
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
此外,您可能需要考慮將此邏輯轉換爲像「Bet.settle_all」這樣的方法,然後從這裏調用它。如果它保存在模型中,那麼維護業務邏輯就會更容易。如果你計劃擁有大量的Bet記錄,你也應該使用'find_each'而不是'each'。最後但並非最不重要的一點,考慮將'each'塊的內部移動到實例方法'Bet#settle'中,並將一些if語句提取到私有實例方法中。 – nertzy