たとえば、ユーザーがフォームで性別と婚姻状況を選択し、そのフォームを投稿して、選択内容がデータベースに保存されるようにするとします。
フォームは次のようになります。
<select id="profile_marital_status" name="profile[marital_status]"><option value=""> Select</option>
<option value="1">Single</option>
<option value="2" selected="selected">Dating</option>
<option value="3">In relationship</option>
<option value="4">Married</option>
<option value="5">Living Together</option>
<option value="6">Divorced</option>
<option value="7">Separated</option>
<option value="8">Widowed</option></select><br />
これにアクセスして保存されたデータをビューに表示するには、@profile.marital_status を実行します。問題は、データベースに格納されているものが整数で表示されることです。
この問題を解決するために、私は現在ヘルパーメソッドでこれを行っています:
def get_gender(number)
if number == 1
'Male'
elsif number == 2
'Female'
end
end
def get_marital_status(number)
if number == 1
'Single'
elsif number == 2
'Dating'
elsif number == 3
'In relationship'
elsif number == 4
'Married'
elsif number == 5
'Living Together'
elsif number == 6
'Divorced'
elsif number == 7
'Separated'
elsif number == 8
'Widowed'
end
end
次に、ビューで:
= get_gender(@profile.gender)
= get_marital_status(@profile.marital_status)
ただし、ユーザーが登録した国を表示する必要がある段階に到達したときに、国のリストを含む長い if ステートメントを入力しているのが見えないため、これは間違っているようです。
これを行うには、もっと実用的で賢明な方法が必要です。DBに保存されていたもの(1や「女性」2など)の代わりに、選択フィールドの値(「男性」など)を表示する方法についての解決策をいただければ幸いです。
アップデート:
私の ApplicationsHelper には、配列に保存されている国の完全なリストがあります。
COUNTRY_AND_ISO_CODE = [
['Any', nil],
['United Kingdom', 826],
['United States', 840],
['-----------', ' '],
['Afghanistan', 4],
['Ãland Islands', 248],
['Albania', 8],
['Algeria', 12],
['American Samoa', 16],
['Andorra', 20],
['Angola', 24],
['Anguilla', 660],
['Antarctica', 10],
['Antigua and Barbuda', 28],
['Argentina', 32],
['Armenia', 51],
['Aruba', 533],
これを私の見解に入れる:
= ApplicationHelper::COUNTRY_AND_ISO_CODE[@profile.country]
この結果を私の見解に示します:
["Sudan", 729]
国名だけを抽出する方法、または文字列以外のすべてを除外する方法を理解する必要があります。
数か月前に国名とその ISO コードの完全なリストを入力したので、これでかなりの時間を節約できます。
何か案は?