2016-05-15 21 views
5

Voglio impostare un errore su un Ecto.Changeset che non è specifico di un campo.Come aggiungere un errore globale a un Ecto Changeset

Nel mio caso, ho un modulo di accesso e voglio impostare un errore dicendo che l'e-mail o la password non sono validi. Tuttavia voglio ancora evidenziare il campo email o quando sono vuoti.

In Rails è possibile farlo aggiungendo una voce a errors[:base]. Esiste un equivalente in Ecto?

risposta

10

Ecto.Changeset.add_error consente di passare qualsiasi atomo come chiave, non deve essere un campo di quel modello. È possibile aggiungere l'errore a :base in questo modo:

add_error(changeset, :base, "email or password is invalid") 

e poi nel modello, sia fare:

<%= error_tag f, :base %> 

o (dopo aver controllato se c'è un errore):

<%= @changeset.errors[:base] %> 

Un'altra opzione per il tuo caso è aggiungere l'errore su entrambi :email e :password

changeset 
|> add_error(:email, "email or password is invalid") 
|> add_error(:password, "email or password is invalid") 
+0

Ho dovuto cambiarlo in '<% = error_tag @changeset,: base%> – flp