2010-11-19 6 views
7

Si cela a été répondu avant je ne peux pas le trouver.en utilisant majuscule sur un collection_select

Je donne les résultats suivants:

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

et ce dans le contrôleur:

@sexes = Sex.all 

les sexes sont tous stockés en minuscules, comme ceci:

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

Je leur ai besoin pour sortir avec les lettres Capital First:

Steer 
Heifer 
Holstein 

J'ai essayé:

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

mais ils ne fonctionnent pas, et je ne m'y attendais vraiment les, mais a dû les essayer avant de poster ce sujet.

+1

Le Wisconsinite en moi demande pourquoi vous mélangez deux sexes avec une race. Les données ne sont pas bonnes! ;-) – Tass

+1

Mon entreprise est bizarre comme ça, mais c'est cool de travailler dans une industrie où vous pouvez avoir du "sexe animal" dans une base de données et personne ne pense que vous l'avez perdu. –

Répondre

6

collection_select appelle une méthode sur chaque objet pour obtenir le texte de la valeur de l'option. Vous pouvez ajouter une nouvelle méthode dans le modèle pour obtenir la valeur droite:

def name_for_select 
    name.capitalize 
end 

puis dans la vue:

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

Merci beaucoup, c'est propre et facile. –

0

La raison pour laquelle votre tentative initiale ne fonctionne pas est que vous tentez de mettre en majuscule un symbole ou une chaîne qui représente le nom du champ et non la variable réelle.

Vous pourriez faire quelque chose comme ceci, puis les données seraient capitalisées avant d'être envoyées à la vue.

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

ou

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

J'aurais dû y penser ... Bien que, l'autre solution soit beaucoup plus propre. Merci pour votre réponse. –

+0

Oui, après avoir vu l'autre réponse, je me suis un peu donné un coup de pied. Trop facile: P – rwilliams

0

La façon plus simple de le faire en RoR4 serait d'utiliser la méthode humanize. Ainsi, le code de votre vue devrait ressembler à ceci:

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

Pas besoin de méthodes supplémentaires!

Questions connexes