2016-06-14 64 views
0

我是Phoenix/Elixir的全新品牌,並且在使用belongs_to協會保存模型時遇到了一些問題。在菲尼克斯保存所屬協會

該設置是我有一個用戶模型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 

控制器代碼:在控制器中的attrs變量

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 

詳情:

​​

回答

0

添加job_title_id到可選(或需要)名單params,並將foreign_key_constraint/3添加到用戶#changeset中的管道中