2010-02-15 3 views
10

Sto creando un'app Rails e ho un modello chiamato User. In questo modello ho un valore booleano chiamato isagirl. Un utente deve specificare se si tratta di una ragazza o meno, che è fatto da due pulsanti di opzione. Nel mio modello ho questo:validates_presence_of +: messaggio mostra il nome del campo

validates_presence_of :isagirl, :message => "You must be either a Boy or a Girl. If not, please contact us." 

Tuttavia, quando non specificare un sesso, sto vedendo questo:

Isagirl Devi essere un ragazzo o di una ragazza.

come messaggio di errore. Il problema è che "Isagirl" non deve essere presente nel messaggio di errore. Come posso disabilitare? E no, usare i CSS per nasconderlo non è un'opzione.

Grazie

+4

per quello che vale, è una buona idea supportare i sessi non binari nelle forme se possibile –

risposta

8

Il modo in cui lo faccio è per emettere il messaggio senza il nome del campo. Ad esempio, ho un partial che restituisce i messaggi di errore dopo che la validazione fallisce.

<ul> 
    <% errors.each do |attribute, message| -%> 
     <% if message.is_a?(String)%> 
      <li><%= message %></li> 
     <% end %> 
    <% end -%> 
</ul> 

Si noti che questo non produce l'attributo. Devi solo assicurarti che tutti i tuoi messaggi abbiano senso senza un nome di attributo.

+0

Ok, ma come fa quel codice sapere quale forma si desidera? –

0

Non so come omettere il nome dell'attributo nella funzione validates_presence_of (può essere doloroso, senza pirateria sporco), ma vorrei usare la funzione di convalida per ottenere ciò che si vuole:

protected 
    def validate 
     errors.add_to_base("You must be either a Boy or a Girl. If not, please contact us.") if params[:isagirl].blank? 
    end 

ho usato specificamente metodo vuoto? qui perché validates_presence_of sta usando blank? per il test dovresti ottenere lo stesso comportamento.

add_to_base sta aggiungendo messaggi di errore generali che non sono correlati agli attributi e questo ti evita di violare la vista.

5

In uno dei miei progetti stavo usando il plugin custom-err-msg. Con esso quando si specifica il messaggio di errore in questo modo:

:message => "^You must be either a Boy or a Girl. If not, please contact us." 

(preavviso ^ agli inizi) non stamperà nome attributo per la stampa di errori. Ed è possibile utilizzare gli helper standard error_messages o error_messages_for.

+0

thumbs up per la risposta :) – bharath

+0

FYI, questa gemma è ora chiamata 'custom_error_message' e è disponibile qui: https://github.com/jeremydurham/custom-err-msg – Martin

0

Si consiglia di utilizzare l'opzione errors.add_to_base. Senza sapere come appare il tuo layout, questo sarà il modo più semplice per visualizzare un semplice messaggio di errore.