在凤凰城保存所属的协会

时间:2016-06-14 12:07:34

标签: phoenix-framework

我是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"}

1 个答案:

答案 0 :(得分:0)

job_title_id添加到可选(或必需)参数列表中,并在用户#changeset

中将foreign_key_constraint/3添加到管道