我是Phoenix / Elixir的新手,在使用belongs_to协会保存模型时遇到了一些麻烦。
设置是我有一个属于JobTitle模型的用户模型。在数据库中,用户具有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
控制器中的attrs变量的详细信息:
%{"job_title_id" => "3", "name" => "Test 1", "type" => "user"}