例如,我允许我的用户在表单中选择他们的性别和婚姻状况,然后发布该表单,以便他们的选择存储在数据库中。
表单可能如下所示:
<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 语句。
必须有一种更实用、更明智的方法来做到这一点。对于如何显示选择字段值(例如“男性”而不是存储在数据库中的值(例如 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 代码的完整列表,这样可以节省大量时间。
有任何想法吗?