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'}
关于如何使用相同的哈希表来显示选择框中的数据,然后在显示页面上的任何想法?
答案 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] %>