2016-06-14 2 views
0

저는 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"} 

답변

0

는 선택 사항 (또는 요구)의 목록에 job_title_id 추가 사용자 # 변경 집합의 파이프 라인에 foreign_key_constraint/3을 추가하십시오.

관련 문제