2016-04-03 16 views
-1

Ich versuche, ein Datum wie Thu, 10th Jan 2016 zu formatieren. Ich habe eine Methode geschrieben, um die aktuelle Zeit zu nehmen und sie wie im genannten Format erscheinen zu lassen.undefined Methode 'Ordinalize' für 3: Fixnum (NoMethodError)

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) 

day ist Zeichenfolge. Ich habe versucht, in int zu konvertieren, und ordinalize darauf anwenden. Es löst einen undefinierten Methodenfehler aus.

+0

Ich sehe keine Methode mit dem Namen '' ordinalize' für Fixnum'. – Aetherus

+0

können Sie die vorletzte Zeile in der time_format-Methode überprüfen – gates

+0

In der Zeile 'day = day.to_i.ordinalize', woher kam die Methode' ordinalize'? – Aetherus

Antwort

1

Fixnum#ordinalize ist nicht in der Ruby-Core-Bibliothek. Siehe Ruby Doc.

Fixnum#ordinalize gehört Aktive Unterstützung, die eine Abhängigkeit von Rails ist, so können Sie kostenlos diese Methode in Rails-Anwendung verwenden, aber in nicht-Schienen-Projekte, müssen Sie Aktive Unterstützung installieren und benötigen mindestens active_support/core_ext/integer/inflections zu Zugriff darauf erhalten.

3

ordinalize ist keine Ruby-Methode, wird aber von Rails 'ActiveSupport gem.

Ich würde argumentieren, dass es sich nicht lohnt, eine ActiveSupport Edelsteinabhängigkeit zu Ihrem Projekt hinzuzufügen, wenn alles, was Sie brauchen, nur eine einfache Methode ist. Finden Sie die Implementierung here, bitte auch nicht die ordinal oben.

Alles, was Sie brauchen, sind diese zwei Methoden:

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 
+0

Vielen Dank. Ich weiß nicht, warum andere Leute nicht so mitfühlend sind – gates

+0

Ich wünschte, ich könnte das mehr als einmal verbessern. Ich habe ActiveSupport buchstäblich für Tage nur für diese eine Methode gekämpft. – Liz

Verwandte Themen