2012-07-23 12 views
5

Sto convalidando i campi di input in ruby ​​su rail. Controllo se l'utente ha inserito o riempito questi campi oppure no. Se diciamo che il campo name non è pieno, inviare un messaggio di errore all'utente con l'indicazione che il campo name non è stato riempito. Lo stesso vale per altri errori. Come posso inviare questo tipo di messaggio in json usando ruby ​​on rails.invio messaggio di errore in json usando ruby ​​on rails

Ecco cosa sto facendo in questo momento.

questo modello

validates :email, :name, :company, :presence => true 
validates_format_of :email, :with => /\A[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\z/ 

Ecco come sto attualmente l'invio di dati JSON per cliente

@contacts = Contact.new(params[:contact]) 

if @contacts.save 
    render :json => { :error => 0, :success => 1 } 
else 
    render :json => { :error => 1, :success => 0 } 
end 

risposta

1

Si dovrebbe utilizzare codici di stato HTTP per dire all'utente che cosa sta succedendo, quindi per non valida record c'è

E poi nel vostro ritorno JSON si potrebbe anche avere un messaggio di errore ciò restituirebbe i messaggi di errore del record/modello attivo attivi al suo interno per fornire loro maggiori informazioni.

+2

Questo dovrebbe essere l'HTTP 422, in quanto 420 non fa parte dello standard (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) – awendt

15

Il modo più semplice sarebbe quello di inviare un hash degli errori.

così:

render :json => { :errors => @contacts.errors.as_json }, :status => 420 

nota che :status => 420 è necessario per fare le cose come jQuery di $ .ajax metodo di chiamare il loro callback di errore e si dovrebbe mai restituire uno stato 200 (il default), quando si verifica un errore.

+3

Questo dovrebbe essere in realtà l'HTTP 422, poiché 420 non fa parte del standard (http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#420) – awendt