ruby-on-rails - 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 并变得混乱。这有帮助吗?
我错过了什么?非常感谢你。
解决方案
我倾向于同意这样的怀疑,即破坏你的哈希是罪魁祸首。要找出原因,请尝试更深的冻结:
UNITS_OF_MEASURE_GROUPED = {
dry: %w(oz lb g kg),
liquid: %w(floz gal ml L),
other: %w(each)
}.transform_values(&:freeze).freeze
这将(希望)FrozenError
从应用程序/框架深处的任何地方抛出一个 ,并伴随有启发性的堆栈跟踪。
推荐阅读
- c# - chart.js 中是否有一个选项可以隐藏图表图例中的值
- erlang - Erlang/Akka 等如何在后台发送消息?为什么不会导致死锁?
- javascript - 使用 js 和 symfony 操作复选框
- android - 隐藏应用程序内的敏感数据
- python - 如何在 Django 中获取特定的查询集
- sql-server - 使用 SSRS 包参数映射用户定义的函数
- c# - 在 Blazor 服务器中强制执行全局授权要求
- reactjs - React Material UI 图标传入 props --> 到 jsx (Typescript)
- c# - 从 CouchDB 使用 EventArgs
- excel - 初始宏运行后,将源范围移动到下一行并复制