Ich bin brandneu zu Phoenix/Elixir und habe Probleme beim Speichern eines Modells mit einer Associates_to Association.Speichern gehört zu Assoziationen in Phoenix
Das Setup ist, dass ich ein Benutzermodell habe, das zu einem JobTitle-Modell gehört. In der Datenbank hat der Benutzer ein Feld job_title_id. Ich aktualisiere den Benutzer mit einer JSONAPI-Eingabe und versuche, die job_title_id von 1 auf 2 zu ändern. Der Benutzer wird korrekt aktualisiert, mit Ausnahme der job_title_id, die dies nicht tut. Ich habe überprüft, dass meine attrs-Variable im Controller den korrekten Wert für job_title_id enthält, aber nicht in der Datenbank gespeichert wird. Fehle ich etwas Offensichtliches hier? Ich benutze das JAserializer-Plugin.
Vielen Dank
defmodule PhoenixSandbox.User do
use PhoenixSandbox.Web, :model
schema "users" do
field :name, :string
belongs_to :job_title, PhoenixSandbox.JobTitle
end
@required_fields ~w(name email bio)
@optional_fields ~w()
def changeset(model, params \\ :empty) do
model
|> cast(params, @required_fields, @optional_fields)
end
end
Controller-Code:
def update(conn, %{"id" => id, "data" => data}) do
user = Repo.get!(User, id)
|> Repo.preload(:job_title)
attrs = JaSerializer.Params.to_attributes(data)
changeset = User.changeset(user, attrs)
case Repo.update(changeset) do
{:ok, user} ->
conn
|> put_status(201)
|> render(:show, data: user)
{:error, changeset} ->
conn
|> put_status(422)
|> render(:errors, data: changeset)
end
end
Einzelheiten der attrs Variable in der Steuerung:
%{"job_title_id" => "3", "name" => "Test 1", "type" => "user"}