2017-07-17 4 views
0

を挿入しようとする制約エラーは、モデル内の口座番号フェニックスエクトユニーク検証:構造体

def change do 
    create unique_index(:users, [:account_number]) 
    end 

そして上で一意のインデックスを持つために、この移行を蘭:

def changeset(struct, params \\ %{}) do 
    struct 
    |> cast(params, [:first_name, :last_name, :email, :phone, :city, :postal_code, :country, :login_count, :last_login, :active, :account_number, :password]) 
    |> validate_required([:first_name, :last_name, :email, :phone, :city, :postal_code, :country, :account_number]) 
    |> validate_length(:password, min: 8, max: 100) 
    |> validate_format(:email, ~r/@/) 
    |> unique_constraint(:email) 
    |> unique_constraint(:account_number) 
    |> put_pass_hash() 
    end 

は、このエラーを生成します:

** (Ecto.ConstraintError) constraint error when attempting to insert struct: 

    * unique: users_account_number_index 

If you would like to convert this constraint into an error, please 
call unique_constraint/3 in your changeset and define the proper 
constraint name. The changeset has not defined any constraint. 

のPostgreSQL 9.6
フェニックス1.2.4
エクト2.1.4

何が欠けていますか?

+0

への鍵

変更

|>unique_constraint(:account_number)

messageオプションを使用して、制約のエラーメッセージを追加し 'チェンジはどのconstraint.'は奇妙で定義されていません。この 'changeset'関数が' User'モデルにあり、あなたはこの関数から返されたチェンジセットを挿入していますか? – Dogbert

+0

そのすべてがokey-dokeyをコンパイルしましたか? –

答えて

0

あなたの現在のコードが Ecto.Changeset.unique_constraint/2 を使用しているエラーは、あなたがオプションを追加しなければならないことを意味しているEcto.Changeset.unique_constraint/3を使用する必要がありますと言います。この場合、単に

|>unique_constraint(:account_number, message: "Account number must be unique or some message like that")