2016-05-19 7 views
1

Ecto.Model.Callbacks sind jetzt veraltet.Ecto: Wie Daten in Changeset injiziert werden, ohne Model.Callbacks

Ich versuche, das gleiche Verhalten wie before_insert zu erreichen, aber ohne Erfolg! Ich kann nicht einmal IO.puts("hello") in meinem changeset/2 auslösen.

Hier ist, was ich habe:

def changeset(model, params \\ :empty) do 
    IO.puts "HELLO" # never prints 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    |> put_change(:column_name, "hello") 
end 

Statt put_change, ich habe versucht, die Haftung verbessernde change, cast und praktisch alles andere innerhalb Ecto.Changeset.

Ich habe versucht, auch die nicht-Rohrverfahren, für alle Fälle:

chset = cast(model, params, @required_fields, @optional_fields) 
put_change(chset, :column_name, "hello") 

Das Endziel der Reihe der inserted_at für einen neuen Wert verschiebt, so dass eine einfache default: "hello" auf dem Schema wird nicht genügen.

Vielen Dank!

+3

Rufen Sie 'YourModel.changeset' explizit von Ihrem Code an? – Dogbert

+0

haben Sie versucht, eine benutzerdefinierte Funktion in der Änderungssatz-Pipeline hinzuzufügen, die einen Änderungssatz zurückgibt, auf den Ihre Änderungen angewendet wurden – coderVishal

Antwort

0

Ich endete damit, es über ein Postgres-Fragment zu lösen.

Es ist nicht ganz das, was ich gesucht habe, also lasse ich diese Frage offen für jemanden mit einer Antwort mit der changset, denn das tut immer noch absolut nichts für mich.

Hier ist meine temporäre Lösung, die die Postgres-Migration-Datei.

create table(:stuffs) do 
    add :expires_at, :datetime, default: fragment("now() + interval '60 days'") 
end