2016-03-02 7 views

Antwort

8

Die Funktion timestamps/1 akzeptiert eine Optionsschlüsselwortliste, mit der Sie den Standardwert festlegen können.

def change do 
    alter table(:channels) do 
    timestamps default: "2016-01-01 00:00:01", null: false 
    end 
end 


UPDATE Ecto> = 2,1
Hier finden Sie die neue Art NaiveDateTime

def change do 
    alter table(:channels) do 
    timestamps default: ~N[2017-01-01 00:00:01], null: false 
    end 
end 

verwenden müssen Wenn Sie mehr Zweifel einen Blick auf die documentation

haben
+0

Ecto 2.0 diese Option entfernt berühren konnte :(Wahrscheinlich ist die beste Lösung, beide Felder manuell hinzuzufügen. –

+2

Die ursprüngliche Lösung arbeitete gerade in Ecto 3.2 :) ... 'Timestamps default:" 2016-01-01 00:00:01 ", null: false" - das ist die ursprüngliche, nicht aktualisierte Antwort. –

0

Ich denke, Sie bekommen das, wenn Sie versuchen, einen Datensatz zu aktualisieren, kann ich zwei mögliche Lösungen denken Sie entweder die inserted_at Spalte in der Tabelle durch Ausführen einer UPDATE-Abfrage oder das Hinzufügen einer Funktion zu Ihrem ecto Modell wie so

def create_changeset(model, attrs) do 
    model 
    |> cast(attrs, @required_fields, @optional_fields) 
    |> update_inserted_at 
    end 

    defp update_inserted_at(changeset) do 
    # check if the updated field is null set a new date 
    end