2016-05-03 5 views
0

I erzeugt mein Modell wie folgt aus:Rails zu speichern und abzurufen Zeit nur in folgendem Format: hh: mm: ss

class CreateMyModel < ActiveRecord::Migration 
    def change 
    create_table :my_model do |t| 
     t.references :place, index: true 
     t.time :time_first 
     t.time :time_second 

     t.timestamps 
    end 
    end 
end 

das Modell zu mysql Speichern funktioniert gut. Die Zeitspalten werden mit hh: mm: ss gefüllt, was in Ordnung ist. Aber wenn ich die Einträge aus mysql abrufen, irgendwie schließt es das Datum, ab 2000-01-01, Beispiel:

2000-01-01T17:00:00Z 

Wie kann ich die Zeitspalten als hh abrufen: mm: ss?

my_model = MyModel.find(id) 
print my_model.to_json#here time_first and time_second include date. 

Antwort

0

Verwendung dieses für die Zeit in Minze und Stunden:

ich den Tabelleneintrag wie diese Abfrage

my_model.time_second.strftime("%H:%M %S %p")

+0

Also wenn ich ein Array von my_model habe, muss ich jeden Eintrag durchlaufen, um die Zeit zu formatieren, bevor ich es rendern kann? Die Zeit ist bereits im richtigen Format gespeichert, daher erscheint mir das als unnötiger Overhead. – MeesterPatat

+0

Schreiben Sie eine Hilfsmethode, die _strftime() _ function verwendet, und rufen Sie auf, wenn Sie die Einträge von mysql abgerufen haben. Dadurch vermeiden Sie, jeden Eintrag zu iterieren, bevor Sie ihn rendern. –

0

Es gibt keine Zeit nur Datentyp in Ruby, Obwohl Sie es in Ihrer Datenbank als Nur-Zeit-Spalte speichern, wird es immer als Datum mit der Zeit analysiert (standardmäßig 2000 Jan 1st). Sie können jedoch einen Attributleser definieren, um die analysierte Datetime in Ihr bevorzugtes Format zu konvertieren, z. ein "HH: MM: SS" -String oder die heutige Zeit:

class MyModel < ActiveRecord::Base 

    # this will return the time formatted as a string: 
    def time_first 
    read_attribute(:time_first).strftime("%H:%M:%S") 
    end 

    # or 
    # this will return the time as todays datetime object: 
    def time_first 
    Time.parse(read_attribute(:time_first).strftime("%H:%M:%S")) 
    end 

end 

Wählen Sie einen der Ansätze, die am besten zu Ihren Bedürfnissen passt.

Verwandte Themen