2016-09-01 3 views
2

は、のForeignKeyでチェンジの仕事をすることはできません。エリクシールエクト - trello例をコピーしようとすると、未知のフィールド

移行:

defmodule Final.Repo.Migrations.CreateKw do 
    use Ecto.Migration 

    def change do 
    create table(:kw) do 
     add :keyo_id, references(:keyo), null: false 
     add :users_id, references(:users), null: false 


     timestamps 
    end 
    create index(:kw, [:keyo_id]) 
    create index(:kw, [:users_id]) 
    create unique_index(:kw, [:keyo_id, :users_id]) 
    end 
end 

モデル:

defmodule Final.Kw do 
    use Final.Web, :model 

    alias Final.Repo 


    schema "kw" do 
    belongs_to :keyo, Final.Keyo 
    belongs_to :user, Final.User 

    timestamps 
    end 

    @required_fields ~w(keyo_id users_id) 
    @optional_fields ~w()  

    def changeset(model, params \\ :empty) do 
    model 
    |> cast(params, @required_fields, @optional_fields) 
    end 

end 

全エラー:

** (ArgumentError) unknown field users_id (note only fields, embeds, belongs_to, has_one and has_many associations are supported in changesets)

コマンドそれを引き起こし:

changeset = Final.Kw.changeset(%Final.Kw{}, %{keyo_id: 1, users_id: 2}) 

私のコードはかなりの例の場合と同じですが、私はすべての可能な組み合わせを試してみましたが、それを動作させることができない、私は何をしないのですか?

+0

をあなたは変更していることをオーバーライドすることができます同様のエラーが発生しましたが、私の場合、問題は 'validate_required'にシンボルの代わりに文字列を渡していました。 –

答えて

2

デフォルトでEctoによって自動的に定義される外部キーはモデル名+ "_id"です。この場合はuser_idですが、他の場所で使用しているキーはusers_idです。

belongs_to :user, Final.User 

をする:

belongs_to :user, Final.User, foreign_key: :users_id 

(それはより多くの慣用考えられているとして、あるいは、可能ならば、あなたは、どこにでも:user_id:users_idを変更することができます。)