【问题标题】:Get key names from key value pairs从键值对中获取键名
【发布时间】:2013-09-22 04:01:36
【问题描述】:

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

我希望每个&lt;option&gt; 的值成为键,并让用户看到该值。我希望这是有道理的。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您通常使用options_for_select 来提供select_tag 的选项。方便的是,您可以将哈希传递给options_for_select,它会做正确的事情:

    options_for_select(container, selected = nil)

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

    问题在于options_for_select 希望哈希的键是人类所看到的,而值是&lt;option&gt;s 的value 属性。您的 Hash 是向后的,但您可以使用 Hash#invert 来翻转键和值:

    invert → new_hash

    返回使用hsh 的值作为键、键作为值创建的新哈希。

    所以你可以在你的控制器中这样做:

    @search_params = Store::SearchParams.invert
    

    然后在 ERB 中:

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

    【讨论】:

      【解决方案2】:

      我认为,这本身会起作用

      定义索引 @search_params = 存储::SearchParams.to_a //它将返回您想要的数组,但值将是 [[key1,value1],[key2,value2]] // 如果你想反转它,那么 Store::SearchParams.to_a.collect{|arr| arr.reverse} 将给出 结束

      【讨论】:

        【解决方案3】:

        这样就可以了:

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

        UPD:也可以考虑Hash#invert(感谢@mu 太短)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-27
          • 2020-08-29
          • 1970-01-01
          • 2015-02-13
          • 2019-07-23
          相关资源
          最近更新 更多