Problem

In einigen Situationen möchtest du etwas in der Datenbank ändern, was aber in keinen Changeset vorhanden ist. Somit dürfest du normalerweise ein neues Changeset anlegen, um evtl. nur einen einzelnen Wert zu ändern.

Ein gutes Beispiel wäre das letzte Datum, an dem sich ein Benutzer eingeloggt hat. Dieses Attribut ist normalerweise von keinen Benutzer änderbar und deshalb auch in keinem Changeset.

Lösung

Ecto beinhaltet die Funktion change. Mit change erstellt Ecto ein Changeset aus einem Schema, ohne cast zu nutzen.

  user = Users.get_user!(123)

  user
  |> Ecto.Changeset.change(last_signed_in: DateTime.now_utc())
  |> Repo.update()