저는 Phoenix/Elixir에 새롭고 belongs_to 연관을 사용하여 모델을 저장하는 데 문제가 있습니다.피닉스의 소속 단체를 보호합니다.
JobTitle 모델에 속한 User 모델을 설치해야합니다. 데이터베이스에는 사용자가 job_title_id 필드가 있습니다. JSONAPI 입력을 사용하여 사용자를 업데이트하고 job_title_id를 1에서 2로 변경하려고합니다. 사용자가 올바르게 업데이트하지 않습니다 (job_title_id는 제외). 컨트롤러의 attrs 변수에 job_title_id에 대한 올바른 값이 포함되어 있는지 확인했지만 데이터베이스에 유지되지 않습니다. 내가 여기서 뭔가 분명한 것을 놓치고 있니? JAserializer 플러그인을 사용하고 있습니다.
많은 감사
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
컨트롤러 코드 : 컨트롤러에 바인드합니다 변수의
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
세부 사항 :
%{"job_title_id" => "3", "name" => "Test 1", "type" => "user"}