将字符串分配给数字范围

时间:2011-12-01 11:02:20

标签: ruby-on-rails

这是一个非常简单的问题。我有以下代码:

  def age_color

    age = Time.now() - created_at

    age_color = 'green' if age < 2.days
    age_color = 'yellow' if age >= 2.days && age <= 5.days
    age_color = 'red' if age > 5.days

  end

无论如何都不能正常工作。我觉得它很难看,让我想起了我的PHP日子。我怎样才能更优雅地写出来?它绝不能是零。

2 个答案:

答案 0 :(得分:1)

您可以使用case

age_in_days = (Time.now() - created_at).days

age_color = case age_in_days
  when 0..1: 'green'
  when 2..5: 'yellow'
  else       'red'
end

日期方法:http://as.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Numeric/Time.html#M000322

答案 1 :(得分:1)

您的构造不起作用,因为您按错误顺序排列。试试这个

def age_color
  if    created_at < 5.days.ago then 'red'
  elsif created_at > 2.days.ago then 'green'
  else                               'yellow'  
end