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

Display text value from dropdown form stored as integer

RailsGuides 之后,我正在创建一个如下形式的下拉列表:

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

生成如下下拉列表:

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

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

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

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

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

在这样的情况下,您有一个 selection 具有从数据库值到显示值的直接映射,并且您始终希望使用显示值进行演示,我使用这种方法:

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

class Person

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

end

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

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

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

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

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