Ruby on rails 从键值对获取键名

Ruby on rails 从键值对获取键名,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在Ruby 2.0上运行Rails 4 我试图用我在模型中设置的键值对数组填充select标记。然而,我很难弄清楚如何抓住钥匙。以下是我到目前为止的情况: 型号 class Store Colors = ['blue', 'green', 'red', 'yellow', 'orange', 'pink', 'purple', 'lime', 'magenta', 'teal'] SearchParams = {'isbn' => 'ISBN', 'intitle' =&

我在Ruby 2.0上运行Rails 4

我试图用我在模型中设置的键值对数组填充select标记。然而,我很难弄清楚如何抓住钥匙。以下是我到目前为止的情况:

型号

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 %>


我希望每个
的值都是键,用户可以看到值。我希望这是有道理的。

我认为,这本身就行

def索引 @search_params=Store::SearchParams.to_a //它将返回所需的数组,但值将为[[key1,value1],[key2,value2]] //如果要反转itm,则Store::SearchParams.to_a.collect{{arr{arr.reverse}将给出
结束

我想,这本身就行

def索引 @search_params=Store::SearchParams.to_a //它将返回所需的数组,但值将为[[key1,value1],[key2,value2]] //如果要反转itm,则Store::SearchParams.to_a.collect{{arr{arr.reverse}将给出 结束这项工作:

def index
  @search_params = Store::SearchParams.map { |key, val| [val, key] }
end

<强> uPD>强>:同时考虑<代码>散列→倒置< /代码>(由于@μ太短)

,即:

def index
  @search_params = Store::SearchParams.map { |key, val| [val, key] }
end

<强> UPD:也考虑<代码>散列→反转/<代码>(由于@μ太短)

您通常用来提供选项。方便的是,您可以将一个哈希值交给
options\u进行选择,这样做是正确的:

选择的选项(容器,已选择=nil)

接受容器(散列、数组、可枚举、您的类型)并返回一个选项标记字符串。[……]

问题在于,select的
options\u希望散列的键是人类看到的,而值是
值属性。您的哈希是向后的,但您可以使用来翻转键和值:

反转→ 新的\u散列

返回通过使用
hsh
的值作为键以及键作为值创建的新哈希

因此,您可以在控制器中执行此操作:

@search_params = Store::SearchParams.invert
然后在雇员再培训局:

<%= select_tag :param_name, options_for_select(@search_params), prompt: 'choose' %>

通常用于为提供选项。方便的是,您可以将一个哈希值交给
options\u进行选择,这样做是正确的:

选择的选项(容器,已选择=nil)

接受容器(散列、数组、可枚举、您的类型)并返回一个选项标记字符串。[……]

问题在于,select的
options\u希望散列的键是人类看到的,而值是
值属性。您的哈希是向后的,但您可以使用来翻转键和值:

反转→ 新的\u散列

返回通过使用
hsh
的值作为键以及键作为值创建的新哈希

因此,您可以在控制器中执行此操作:

@search_params = Store::SearchParams.invert
然后在雇员再培训局:

<%= select_tag :param_name, options_for_select(@search_params), prompt: 'choose' %>