undefined方法`ordinalize'为3:Fixnum(NoMethodError)

gat*_*tes 0 ruby

我正在尝试格式化日期Thu, 10th Jan 2016.我写了一个方法来获取当前时间,并使其显示为所述格式.

def time_format(ob_created_at)
  ob_duplicate = ob_created_at
  ob_duplicate = ob_created_at.strftime("%a")
  day = ob_created_at.strftime("%d")
  day = day.to_i.ordinalize
  ob_duplicate = ob_duplicate + day +  ob_created_at.strftime("%b %Y")
 end

t = Time.now
time_format(t)
Run Code Online (Sandbox Code Playgroud)

day是字符串.我试图转换为int,并申请ordinalize它.它引发了一个未定义的方法错误.

spi*_*ann 7

ordinalize不是Ruby方法,但它是由Rails的ActiveSupportgem 添加的.

我认为,ActiveSupport当你需要的只是一个简单的方法时,为你的项目添加一个gem依赖是不值得的.在这里找到它的实现,请注意ordinal上面的内容.

您只需要这两种方法:

def ordinal(number)
  abs_number = number.to_i.abs

  if (11..13).include?(abs_number % 100)
    "th"
  else
    case abs_number % 10
      when 1; "st"
      when 2; "nd"
      when 3; "rd"
      else    "th"
    end
  end
end

def ordinalize(number)
  "#{number}#{ordinal(number)}"
end
Run Code Online (Sandbox Code Playgroud)