如何在轨道上的ruby中显示选择字段值而不是相关的存储整数?

例如,我允许我的用户在表单中选择他们的性别和婚姻状况,然后发布该表单,以便他们的选择存储在数据库中。

表单可能如下所示:

 Select Single Dating In relationship Married Living Together Divorced Separated Widowed

要访问它并在视图中显示存储的数据,我会这样做@ 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语句。

必须有一种更加切合实际的方法来做到这一点。 我将很感激我可以显示选择字段值的任何解决方案,例如“男性”而不是存储在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代码的完整列表,这样可以节省大量时间。

有任何想法吗?

首先,您的代码可以重构为用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 

其次, 标签的内容不随表单一起提交,因此绝对无法在服务器上访问它们。 您有以下选择:

  • 保持原样。
  • 将存储在数据库中的值更改为实际的字符串值而不是数字,这样就可以以数据库中的某些空间为代价删除模糊处理。
  • 对字段进行非规范化,为值创建单独的表,因此存储的数字现在是另一个表中的ID。

这是我的解决方案。 我在几个月前创建了数组,用于处理用户配置文件详细信息的编辑,因此我使用数据库中存储的整数来获取我想要的结果。

在我的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