2012-06-30 15 views
5

Sono un super ruby ​​/ rails newb quindi stai andando a stare con me qui.Errori di convalida di Ruby on Rails

Ho installato una piccola app che prende un indirizzo e-mail e lo salva, ho impostato la convalida sul modello (email unica e valida) e funzionano entrambi.

Sto usando il codice seguente per provare salvare l'e-mail, se già esiste o non è un formato valido ha bisogno di fermarsi e impostare il messaggio di errore

def create 
    interest = KnownInterest.new(:email => params[:email]) 
    if(interest.valid? and interest.save) 
     flash[:notice] = "Thanks for showing interest, We'll be in touch with updates." 
    else 
     flash[:notice] = interest.errors.messages 
    end  
    redirect_to action: "index" 
end 

questo sputa [ "La posta elettronica non valida "], come faccio a ottenere questo per essere una stringa (non quello che penso è un array, correggimi se sbaglio)

Grazie mille

risposta

9

se si desidera solo il primo messaggio poi interest.errors.messages.first. Se li vuoi tutti allora qualcosa come interest.errors.messages.join(", ") raggrupperà tutti i messaggi in una stringa.

Tuttavia è possibile che si desideri rispolverare le convalide e gli errori ActiveRecord.
Ecco una buona guida:

http://guides.rubyonrails.org/active_record_validations_callbacks.html

Read almeno:

+4

Quello dovrebbe in realtà essere 'interest.errors.full_messages.join ('')' - nota 'full_messages' invece di' messages' (almeno questa è la case in Rails 3.2) – Tinynumbers

4

.messages restituisce un array di tutti i vostri errori. Anche se è solo uno.

Quindi, per loro visualizzare correttamente, farlo a suo avviso:

- for error in flash[:notice] do 
    = error 

O se preferite html.erb:

<%- for error in flash[:notice] do %> 
    <%= error %> 
<%- end %> 
-1

interest.errors.messages.join(<any concatenating character>) creerà una stringa concatenando i tuoi elementi dell'array.

È possibile utilizzare una stringa, ad esempio ",", ":" o praticamente qualsiasi cosa da concatenare.

+1

@ equipment.errors.messages.join (",") => metodo non definito 'join 'per # notaceo

0

Questo lavoro per me:

<html> 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <% flash.each do |key, value| %> 
     <div class="alert alert-<%= key %>"><%= value %></div> 
     <% end %> 
     <%= yield %> 
     <%= render 'layouts/footer' %> 
     <%= debug(params) if Rails.env.development? %> 
    </div> 

    </body> 
</html>