0
  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

このメソッドはauction.rb、Rails アプリケーションのモデル内にあります。

私の見解の 1 つでは、システム内のすべてのオークションを一覧表示しており、オークションが終了するまでの残り時間も表示しています。

時間に応じて、days hoursまたはを表示しminutesます。

コードは正常に動作していますが、見た目と感触が非常に不格好です。これを少し盛り上げる方法はありますか?

4

3 に答える 3

1

どうですか

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
于 2014-01-28T13:15:54.917 に答える
1

以下のように簡略化できます。コードが冗長であることに注意してください。の場合difference[:hour] >= 23、それは を伴いdifference[:hour] >= 1、後者によってキャプチャされるため、前者の条件が true と評価されることはありません。ということで、その部分が取り外せます。

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
于 2013-08-17T01:38:36.670 に答える
1

意図せずに不等式を正しく取得していないと思います(必要はあり<=ません>=)。また、時差が常に を超えないと仮定する場合、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
于 2013-08-17T01:48:26.193 に答える