2017-11-19 16 views
0

콘솔의 레코드 값을 업데이트하려고합니다. ies -S mix.Phoenix : 외래 키의 변경 사항을 고려하지 않습니다.

iex> video = Repo.one(from v in Video, limit: 1) 
%Rumbl.Video{...} 

동영상의 제목을 변경하면 모든 것이 제대로 작동하는 것 같습니다.

iex> changeset = Video.changeset(video, %{category_id: 3}) 
#Ecto.Changeset<action: nil, changes: %{}, 
errors: [], data: #Rumbl.Video<>, valid?: true> 

무엇을 어떻게해야이 외래 키에 변경 사항이 accoung으로 수행 할 수있는 위해 :

iex> changeset = Video.changeset(video, %{title: "some title"}) 
#Ecto.Changeset<action: nil, changes: %{title: "some title"}, 
errors: [], data: #Rumbl.Video<>, valid?: true> 

그러나 외부 키를 변경 효과가 없습니다 것 같다?

여기 모델

defmodule Rumbl.Video do 
    use Rumbl.Web, :model 

    schema "videos" do 
    field :url, :string 
    field :title, :string 
    field :description, :string 
    belongs_to :user, Rumbl.User, foreign_key: :user_id 
    belongs_to :category, Rumbl.Category, foreign_key: :category_id 

    timestamps() 
    end 

    @required_fields ~w(url title description) 
    @optional_fields ~w(category_id) 

    @doc """ 
    Builds a changeset based on the `struct` and `params`. 
    """ 
    def changeset(struct, params \\ %{}) do 
    struct 
    |> cast(params, @required_fields, @optional_fields) 
    |> validate_required([:url, :title, :description]) 
    |> assoc_constraint(:category) 
    end 

끝 체외 2.2, the fourth argument to cast is opts에서

답변

1

하지 선택적 필드입니다. 이전에는 v2.1에서 더 이상 사용되지 않는 선택적 필드 였으므로 대신 validate_required을 사용할 것을 권장합니다. 변경 로그에서 찾을 수는 없지만 이것은 apparently removed in v2.2.0입니다.

struct 
|> cast(params, @required_fields ++ @optional_fields) 
|> validate_required([:url, :title, :description]) 

을하거나 수행하십시오 : 당신은 체외 2.2이에 코드를 변경해야

@required_fields ~w(url title description)a 
@optional_fields ~w(category_id)a 

|> cast(params, @required_fields ++ @optional_fields) 
|> validate_required(@required_fields)