2010-11-19 52 views
7

如果在找不到它之前已回答此問題。在collection_select上使用大寫字母

我有以下幾點:

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

,這在控制器:

@sexes = Sex.all 

男女都存儲在小寫,就像這樣:

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

我需要他們以大寫字母輸出:

Steer 
Heifer 
Holstein 

我想:

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

但他們沒有工作,我真的沒有想到他們,但不得不張貼在此之前嘗試。

+1

在我的Wisconsinite問你爲什麼混合兩個性別與品種。數據不好! ;-) – Tass 2016-07-01 16:19:43

+1

我的公司很奇怪,但在一個可以在數據庫中擁有「動物性」的行業工作並且沒有人認爲你已經失去它是很酷的。 – 2016-07-02 15:20:29

回答

6

collection_select調用每個對象上的方法來獲得期權價值的文本。然後

def name_for_select 
    name.capitalize 
end 

視圖:您可以在模型中添加一個新的方法來獲得正確的價值

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

非常感謝,這很簡單。 – 2010-11-19 20:00:47

0

你最初的嘗試不起作用的原因是你試圖大寫一個符號或一個代表字段名稱而不是實際變量的字符串。

你可以做這樣的事情,然後數據將被髮送到視圖之前大寫。

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

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

我應該想到這個......雖然,另一個解決方案更清潔。謝謝您的回答。 – 2010-11-19 20:01:28

+0

是的,我看到其他答案後,我踢了一下自己。太容易了:P – rwilliams 2010-11-19 20:48:46

0

更簡單的方式來做到這一點ROR4將使用humanize方法。因此,您的查看代碼如下所示:

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

不需要任何額外的方法!