显示存储为整数的下拉表单中的文本值

时间:2016-05-10 02:55:16

标签: ruby select multidimensional-array ruby-on-rails-3.2

关注RailsGuides,我正在创建一个下拉形式的下拉列表:

[['Lisbon', 1], ['Madrid', 2], ...]

生成一个下拉列表,如:

<option value="1">Lisbon</option>
<option value="2">Madrid</option>

在我的展示页面上,我想显示存储值的文本(Madrid)而不是整数(2)。

该值存储在数据库中。这是一个实时系统,这意味着我无法更改存储的内容(我可以,但不愿意)。

我更喜欢从哈希构建下拉列表,但由于这是RailsGuide中建议的格式,我假设有一个内置帮助程序可以执行此操作。如果我将下拉列表存储为字符串会更容易,尽管它会占用数据库中的大量空格。

我无法使用索引,因为值不是从0开始的,而且可能不是有序的。我可以在这个二维数组上写一个搜索,但是有更简单的方法吗?有谁知道解决这个问题的最简单方法?

1 个答案:

答案 0 :(得分:1)

在这种情况下,如果您选择了从数据库值到显示值的直接映射,并且您一直想使用显示值进行演示,我会使用以下方法:

在模型中,声明一个具有映射关系的数组:

class Person

  GENDER = [
    ["Male", "m"],
    ["Female", "f"]
  ]

end

在编辑视图(表单)中,您可以使用以下方法创建选择:

<%= f.select :gender, Person::GENDER %>

在节目视图中,您可以使用以下格式显示:

<%= Person::GENDER.find {|item| item[1] == @person.gender }[0] %>

此方法使您能够控制选择中项目的显示顺序,并且仍然能够合理地轻松呈现显示值。