2010-11-19 5 views
7

私はそれが見つからない前にこれに答えていれば。このように、collection_selectで大文字を使用すると

@sexes = Sex.all 

男女がすべて小文字に格納されています:コントローラで

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

と、この:

私には、以下の持っている

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は、なぜあなたが品種と2つの性別を混ぜているのか尋ねます。データは良いことではありません! ;-) – Tass

+1

私の会社はそれほど変わっていますが、データベースに「動物のセックス」を持つことができ、誰もあなたが失ったと思っている業界ではうまくいきません。 –

答えて

6

collection_selectオプション値のテキストを取得するために、各オブジェクトのメソッドを呼び出します。あなたは正しい値を取得するためにモデルに新しいメソッドを追加することができます。

def name_for_select 
    name.capitalize 
end 

、ビューで:

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

ありがとう、これはきれいで簡単です。 –

0

最初の試行がうまくいかない理由は、実際の変数ではなく、フィールド名を表すシンボルまたは文字列を大文字にすることです。

このようなことができたら、データが表示される前に大文字になります。

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

または

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

私はこれを考えていたはずです...しかし、他の解決法ははるかにクリーンです。あなたの答えをありがとう。 –

+0

ええ、私は他の答えを見た後、私は自分自身を少し蹴った。あまりにも簡単:P – rwilliams

0

ROR4でこれを行う簡単な方法は、humanizeメソッドを使用することです。したがって、あなたのビューコードは次のようになります:

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

追加のメソッドは必要ありません!

関連する問題