2010-11-19 10 views
7

Si esto ha sido respondido antes de que no pueda encontrarlo.usando mayúsculas en un collection_select

Tengo el siguiente:

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

y esto en el controlador:

@sexes = Sex.all 

los sexos se almacenan en minúsculas, así:

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

los necesito para salir con las letras de Capital First:

Steer 
Heifer 
Holstein 

Traté:

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

pero que no funcionan, y yo realmente no esperar que ellos, pero tuvo que probarlos antes de publicar esto.

+1

The Wisconsinite en mí pregunta por qué estás mezclando dos sexos con una raza. ¡Los datos no son buenos! ;-) – Tass

+1

Mi empresa es así de extraña, pero es genial trabajar en una industria donde puedes tener "sexo animal" en una base de datos y nadie piensa que la hayas perdido. –

Respuesta

6

collection_select llama a un método en cada objeto de obtener el texto para el valor de la opción. Puede agregar un nuevo método en el modelo para obtener el valor correcto:

def name_for_select 
    name.capitalize 
end 

continuación, en la vista:

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

Muchas gracias, esto es limpio y fácil. –

0

La razón por la que su intento inicial no está funcionando es que está intentando utilizar un símbolo o una cadena que representa el nombre del campo y no la variable real.

Puede hacer algo como esto y los datos se escribirán en mayúscula antes de enviarse a la vista.

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

o

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

Debería haber pensado en esto ... Aunque, la otra solución es mucho más limpia. Gracias por su respuesta. –

+0

Sí, después de ver la otra respuesta, me di una patada. Demasiado fácil: P – rwilliams

0

La manera más sencilla de hacer esto en RoR4 sería utilizar el método humanize. Por lo tanto, su código de vista se vería así:

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

¡No necesita ningún método adicional!

Cuestiones relacionadas