我在Ruby 2.0上运行Rails 4
我正在尝试使用我在模型中设置的键值对数组填充选择标记。但是,我无法弄清楚如何抓住钥匙。以下是我到目前为止的情况:
模型
class Store
Colors = ['blue', 'green', 'red', 'yellow', 'orange', 'pink', 'purple', 'lime', 'magenta', 'teal']
SearchParams = {'isbn' => 'ISBN', 'intitle' => 'Title', 'inauthor' => 'Author', 'inpublisher' => 'Publisher', 'subject' => 'Subject', 'lccn' => 'LCCN', 'oclc' => 'OCLC'}
end
控制器
def index
@search_params = Store::SearchParams.map { |param| [param, param.key] }
end
注意:我知道.key
不存在 - 我补充说希望它能更好地传达我想要做的事情。
查看
<%= form_tag do %>
<%= select_tag :param_name, @search_params, prompt: 'choose' %>
<% end %>
我希望每个<option>
的值都是关键,并且用户可以看到该值。我希望这是有道理的。
答案 0 :(得分:2)
您通常使用options_for_select
为select_tag
提供选项。方便的是,您可以将哈希值交给options_for_select
,它会做正确的事情:
options_for_select(container,selected = nil)
接受容器(散列,数组,可枚举,您的类型)并返回一串选项标记。 [...]
问题在于options_for_select
希望Hash的键是人类看到的,而值是value
的{{1}}属性。您的哈希值是向后的,但您可以使用Hash#invert
来翻转键和值:
反转→new_hash
返回使用
<option>
的值作为键创建的新哈希,以及键作为值。
所以你可以在控制器中执行此操作:
hsh
然后在ERB中:
@search_params = Store::SearchParams.invert
答案 1 :(得分:1)
我认为,这本身会起作用
def index @search_params = Store :: SearchParams.to_a //它将返回您想要的数组,但值为[[key1,value1],[key2,value2]] //如果你想要反转它,那么Store :: SearchParams.to_a.collect {| arr | arr.reverse}会给出这个 端
答案 2 :(得分:1)
那样做:
def index
@search_params = Store::SearchParams.map { |key, val| [val, key] }
end
UPD :同时考虑Hash#invert
(感谢@mu太短了)