簡體   English   中英

我怎樣才能使這個條件復雜的實例方法更符合Ruby的習慣?

[英]How can I make this conditional riddled instance method more Ruby idiomatic?

  def short_remaining_time
    difference  = Time.diff(Time.now, created_at + 7.days, '%d - %H - %N')

    # To display the short remaining time in an auction listing.
    if difference[:day] == 0 and difference[:hour] >= 1
      "#{difference[:minute]} minutos"
    elsif difference[:day] == 0 and difference[:hour] >= 23
      "#{difference[:hour]} horas"
    else
      if difference[:day] != 1
        "#{difference[:day]} dias"
      else
        "#{difference[:day]} dia"
      end
    end
  end

該方法在我的Rails應用程序的auction.rb模型中。

在我的一種觀點中,我列出了系統中的所有拍賣,並且還顯示了拍賣結束之前還剩下多少時間。

根據時間的量,我要么顯示days hoursminutes

該代碼運行良好,外觀看上去很笨拙。 有什么辦法可以解決這個問題嗎?

您可以如下簡化。 請注意,您的代碼是多余的。 如果difference[:hour] >= 23 ,那么這就意味着difference[:hour] >= 1 ,並且將被后者捕獲,因此前者的條件永遠不會被評估為真。 這樣就可以刪除該部分。

def short_remaining_time
  difference  = Time.diff(Time.now, created_at + 7.days, '%d - %H - %N')
  case day = difference[:day]
  when 0
    if difference[:hour] >= 1 then "#{difference[:minute]} minutos"
    else "#{day} dias"
    end
  when 1 then "#{day} dia"
  else "#{day} dias"
  end
end

我假設您無意間遇到了不平等現象(您需要<=不是>= )。 另外,如果您認為時差始終不超過23 ,則不需要進行檢查(即,我們假設時差已“標准化”)。 因此,我將以這種方式修改它,以保持您的原始意圖:

  def short_remaining_time
    difference  = Time.diff(Time.now, created_at + 7.days, '%d - %H - %N')

    # To display the short remaining time in an auction listing.
    if difference[:day] == 0
      if difference[:hour] <= 1
        "#{difference[:minute]} minutos"
      else
        "#{difference[:hour]} horas"
      end
    else
      "#{difference[:day]} dia" + ((difference[:day] == 1) ? "" : "s")
    end
  end

關於什么

def short_remaining_time
  difference      = Time.diff(Time.now, created_at + 7.days, '%d - %H - %N')
  diff_in_minutes = difference[:day] * 3600 + difference[:hour] * 60

  case diff_in_minutes
    when 0..60      then  "#{difference[:minute]} minutos"
    when 61..3600   then  "#{difference[:hour]  } horas"
    when 3600..7200 then  "#{difference[:day]   } dia"
    else                  "#{difference[:day]   } dias"
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM