比如说我允许我的用户在表单中选择他们的性别和婚姻状况,然后发布该表单,以便他们的选择存储在数据库中。
表单可能如下所示:
<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。问题是它将显示存储在db中的整数。
要解决这个问题,我目前正在使用辅助方法:
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代码列表,这样可以节省大量时间。
有什么想法吗?
答案 0 :(得分:0)
首先,您的代码可以重构为使用case
:
def get_gender(number)
case number
when 1 then 'Male'
when 2 then 'Female'
end
end
def get_marital_status(number)
case number
when 1 then 'Single'
when 2 then 'Dating'
when 3 then 'In relationship'
when 4 then 'Married'
when 5 then 'Living Together'
when 6 then 'Divorced'
when 7 then 'Separated'
when 8 then 'Widowed'
end
end
其次,<option>
标记的内容未随表单一起提交,因此绝对无法在服务器上访问它们。您有以下选择:
答案 1 :(得分:0)
这是我的解决方案。我在几个月前创建了数组,用于处理用户配置文件详细信息的编辑,因此我使用数据库中存储的整数来获取我想要的结果。
在我的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].first
在我的视图中显示此结果:
United Kingdom