2016-03-02 15 views

risposta

8

La funzione timestamps/1 accetta un elenco di parole chiave opzioni, è possibile impostare il valore predefinito con esso.

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


UPDATE Ecto> = 2.1
Avrete bisogno di usare il nuovo tipo NaiveDateTime

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

Se hai più dubbi diano un'occhiata al documentation

+0

Ecto 2.0 ha rimosso questa opzione :(Probabilmente la soluzione migliore è aggiungere entrambi i campi manualmente. –

+2

La soluzione originale ha funzionato in Ecto 3.2 proprio ora :) ... 'Impostazione data/ora ':" 01-01-01 00:00:01 ", null: false' - questa è la risposta originale non aggiornata. –

0

Immagino che tu lo capisca quando stanno cercando di aggiornare un record, mi viene in mente 2 possibili soluzioni si potrebbe o toccare la colonna inserted_at nella tabella eseguendo una query UPDATE o l'aggiunta di una funzione per il vostro modello ecto in questo modo

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