首页 > 解决方案 > Ruby Hash 包含单个键的额外值

问题描述

我尝试以多种方式构建散列,但是当我在grouped_options_for_select标签中使用它时,会有一些额外的值不在我的原始散列中。以下是我尝试构建哈希的两种方法:

UNITS_OF_MEASURE_GROUPED = {
  "Dry" =>     ["oz", "lb", "g", "kg"],
  "Liquid" =>  ["floz", "gal", "ml", "L"],
  "Other" =>   ["each"]
}.freeze

还有一点更明确和非常罗嗦:

UNITS_OF_MEASURE_GROUPED = {}
UNITS_OF_MEASURE_GROUPED[:dry] = ["oz", "lb", "g", "kg"]
UNITS_OF_MEASURE_GROUPED[:liquid] = ["floz", "gal", "ml", "L"]
UNITS_OF_MEASURE_GROUPED[:other] = ["each"]
UNITS_OF_MEASURE_GROUPED.freeze

grouped_options_for_select总是在第一部分(“干”)中包含“floz”和“each”。请参阅附图。

我忘了添加我的表单元素代码:

<%= form.select :unit_of_measure, grouped_options_for_select(UNITS_OF_MEASURE_GROUPED) %>

根据 Guiseppe 在另一条评论中的说法,我尝试<%= form.select :unit_of_measure, UNITS_OF_MEASURE_GROUPED %>了相同的结果。

看起来真的很奇怪的是,当我在触发错误后进入控制台时,我的UNITS_OF_MEASURE_GROUPED哈希显示:

{:dry=>["oz", "lb", "g", "kg", ["floz", "gal", "ml", "L"], ["each"]], :liquid=>["floz", "gal", "ml", "L"], :other=>["each"]}

我的猜测是这搞砸了 HTML 并变得混乱。这有帮助吗?

我错过了什么?非常感谢你。

在此处输入图像描述

标签: ruby-on-railsrubyruby-hash

解决方案


我倾向于同意这样的怀疑,即破坏你的哈希是罪魁祸首。要找出原因,请尝试更深的冻结:

UNITS_OF_MEASURE_GROUPED = {
  dry: %w(oz lb g kg),
  liquid: %w(floz gal ml L),
  other: %w(each)
}.transform_values(&:freeze).freeze

这将(希望)FrozenError从应用程序/框架深处的任何地方抛出一个 ,并伴随有启发性的堆栈跟踪。


推荐阅读