2017-07-17 4 views
0

Ran diese Migration, um einen eindeutigen IndexPhoenix Ecto Einzigartige Validierung: Constraint-Fehler beim struct

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

Und dann im Modell auf Kontonummer haben einzufügen versuchen:

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 

Erzeugt diesen Fehler :

** (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
Phoenix 1.2.4
Ecto 2.1.4

Was fehlt mir?

+0

Schlüssel mit dem message Option hinzufügen 'Die changeset definiert hat keine constraint.' seltsam. Sind Sie sicher, dass diese 'changeset'-Funktion im 'User'-Modell ist und Sie ein Changeset einfügen, das von dieser Funktion zurückgegeben wird? – Dogbert

+0

Und dass alles okey-dokey kompiliert? –

Antwort

0

Ihre aktuellen Code wird mit Ecto.Changeset.unique_constraint/2 Der Fehler sagt, Sie sollten Ecto.Changeset.unique_constraint/3 verwenden, was bedeutet, Sie Optionen hinzufügen. In diesem Fall nur Constraint Fehlermeldung

ändern

|>unique_constraint(:account_number)

zu

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

Verwandte Themen