2013-03-15 15 views
5

Ich habe gerade mit RoR begonnen und habe eine Frage: Wie kann ich den aktuellen Zeitstempel (oder irgendeine Art von Zeit) in das Modell einfügen? Unten sehen Sie die Log-Funktion create.Wie man Zeitstempel in Rails Datenbankspalte einfügt

def create 
    @log = Log.new(params[:log]) 

    respond_to do |format| 
     if @log.save 
     format.html { redirect_to @log, notice: 'Log was successfully created.' } 
     format.json { render json: @log, status: :created, location: @log } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @log.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

Haben Sie das Modell mit dem Schienen Generator erstellt? –

Antwort

18

Der Rails Modellgenerator erzeugt automatisch created_at und updated_atdatetime Felder in der Datenbank für Sie. Diese Felder werden automatisch aktualisiert, wenn ein Datensatz erstellt bzw. aktualisiert wird.

Wenn Sie einen Zeitstempel manuell erstellen möchten, fügen Sie der Datenbank eine Datetime-Spalte (z. B. timestamp_field) hinzu und verwenden Sie in Ihrem Modell einen Rückruf before_save.

class Log < ActiveRecord::Base 
    before_save :generate_timestamp 

    def generate_timestamp 
    self.timestamp_field = DateTime.now 
    end 
end 
+0

Aber ich würde den Zeitstempel einfügen. – venumaer

+0

Ich aktualisierte die Antwort mit einem Beispiel eines manuellen Zeitstempels. –

+0

Müssen Sie nicht 'self.timestamp_field = DateTime.now' schreiben? –

2

die Schienen Mit Generator beispiels rails generate model Log Schienen erzeugt zwei Zeitstempelfelder automatisch für Sie.

created_at und updated_at diese beiden Felder werden durch Rails gefüllt werden, wenn Sie einen neuen Datensatz erstellen tun Log.new dann save auf diesen Datensatz oder Log.create Das updated_at Feld wird nur dann aktualisiert, wenn Sie die Attribute des Datensatz aktualisieren oder wenn Sie die Methode verwenden touch auf einer Instanz des Modells.

Nun, wenn Sie wollen ein anderes Feld mit dem Zeitstempel Typ erstellen Sie eine Migration machen könnten, die wie diese

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp 

eine Spalte zu Ihrem Modell fügt eine Migration Dies wird erzeugen, die eine Spalte mit dem Namen hinzufügen werden my_timestamp_field mit einem timestamp Typ, genau wie die created_at und updated_at

Verwandte Themen