将哈希表中的数据显示到选择框中

时间:2010-02-18 10:23:22

标签: html ruby-on-rails

A有一个包含其中国家/地区的哈希表:

@countries = {'United States' => 'US', 'France' => 'FR'} 

我使用以下代码在选择框中显示它:

<%= select_tag 'countries', 
            options_for_select(@countries.to_a) %>

现在,当我将数据保存在我的表格中时,我排在美国,英国......等等,现在问题是当我想要输出数据时,所以我想输出'美国'而不是美国我用:

<%=h @countries[@offer.from_country] %>

但是第一个哈希表无法工作,我必须颠倒顺序并使用:

@countries = {'US' => 'United States', 'FR' => 'France'} 

关于如何使用相同的哈希表来显示选择框中的数据,然后在显示页面上的任何想法?

3 个答案:

答案 0 :(得分:2)

尝试将<option>标记的value属性设置为短国家/地区名称,将标记之间的文本设置为完整的国家/地区名称,如FormOptionsHelper documentation所示。

然后返回的值是短国家/地区名称,但用户会在菜单中看到全名。

答案 1 :(得分:2)

您也可以使用数组而不是哈希来执行此操作。这样做的好处是,您的选项将始终按照将它们放入数组的顺序显示。

@countries = [['United States', 'US'], ['France', 'FR']]

然后你的select_tag使用数组:

<%= select_tag 'countries', options_for_select(@countries) %>

要输出数据,您可以使用数组#rassoc

<%=h @countries.rassoc(@offer.from_country)[0] %>

答案 2 :(得分:1)

在哈希上使用invert。它交换密钥和值:

{:a => '1', :b => '2'}.invert
=> {"1"=>:a, "2"=>:b}

你的例子:

<%=h @countries.invert[@offer.from_country] %>