2010-11-19 7 views
7

Se questo è stato risolto prima non riesco a trovarlo.utilizzando maiuscola su una collezione_select

Ho il seguente:

= f.collection_select :sex_id, @sexes, :id, :name 

e questo nel controller:

@sexes = Sex.all 

i sessi sono tutti memorizzati in minuscolo, in questo modo:

id|name 
1|steer 
2|heifer 
3|holstein 

ho bisogno di loro per l'output con lettere Capital First:

Steer 
Heifer 
Holstein 

ho provato:

= f.collection_select :sex_id, @sexes, :id, :name.capitalize 
= f.collection_select :sex_id, @sexes, 'id', 'name'.capitalize 

ma non funzionano, e non ho davvero aspettarci che, ma ha dovuto provare loro prima di questo distacco.

+1

Il Wisconsinite in me mi chiede perché stai mescolando due sessi con una razza. I dati non vanno bene! ;-) – Tass

+1

La mia compagnia è strana, ma è bello lavorare in un settore in cui è possibile avere "sesso animale" in un database e nessuno pensa di averlo perso. –

risposta

6

collection_select chiama un metodo su ogni oggetto per ottenere il testo per il valore di opzione. È possibile aggiungere un nuovo metodo nel modello per ottenere il giusto valore:

def name_for_select 
    name.capitalize 
end 

poi nella vista:

= f.collection_select :sex_id, @sexes, :id, :name_for_select 
+0

Grazie mille, questo è pulito e facile. –

0

Il motivo per cui il tentativo iniziale non funziona è che si sta tentando di inserire in maiuscolo un simbolo o una stringa che rappresenta il nome del campo e non la variabile effettiva.

Si potrebbe fare qualcosa del genere e quindi i dati sarebbero in maiuscolo prima di essere inviati alla vista.

@sexes = Sex.all  
@sexes = @sexes.each{|sex| sex.name.capitalize} 

o

@sexes = Sex.all.each{|sex| sex.name.capitalize} 
+0

Avrei dovuto pensarci ... Anche se l'altra soluzione è molto più pulita. La ringrazio per la risposta. –

+0

Sì, dopo aver visto l'altra risposta mi sono preso un po 'a calci. Troppo facile: P – rwilliams

0

Il modo più semplice per fare questo in RoR4 sarebbe quella di utilizzare il metodo humanize. Quindi, il tuo codice di visualizzazione sarebbe il seguente:

= f.collection_select :sex_id, @sexes, :id, :humanize 

Non sono necessari metodi aggiuntivi!

Problemi correlati