Ruby 哈希包含单个键的额外值
Ruby Hash is including extra values for a single key
我曾尝试以多种方式构建散列,但是当我在 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
总是在第一部分(“dry”)中包含“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 并变得混乱。有帮助吗?
我错过了什么?提前谢谢你。
问题在于您在 erb
标记内调用 form.select
的方式。
您应该传递一个集合,但您传递的是 string
作为第二个参数。
您应该传递 UNITS_OF_MEASURE_GROUPED
而不是 grouped_options_for_select(UNITS_OF_MEASURE_GROUPED)
,如下例所示:
<%= form.select :unit_of_measure, UNITS_OF_MEASURE_GROUPED %>.
如果你看 rails guides 你可以找到一个例子。
select
helper
Wraps ActionView::Helpers::FormOptionsHelper#select for form builders:
ActionView::Helpers::FormOptionsHelper#select
requires a collection 作为参数。
已编辑。
可能是你默认获取的隐藏文件的生成
尝试以下
<%= form.select :unit_of_measure, UNITS_OF_MEASURE_GROUPED, {include_hidden: false} %>
详情见Documentation。
我倾向于同意这样一种怀疑,即破坏您的哈希值是罪魁祸首。要找出原因,请尝试更深的冻结:
UNITS_OF_MEASURE_GROUPED = {
dry: %w(oz lb g kg),
liquid: %w(floz gal ml L),
other: %w(each)
}.transform_values(&:freeze).freeze
这将(希望)抛出一个 FrozenError
,以及随附的照明堆栈跟踪,从 app/framework 深处的任何地方都在搞砸。
我曾尝试以多种方式构建散列,但是当我在 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
总是在第一部分(“dry”)中包含“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 并变得混乱。有帮助吗?
我错过了什么?提前谢谢你。
问题在于您在 erb
标记内调用 form.select
的方式。
您应该传递一个集合,但您传递的是 string
作为第二个参数。
您应该传递 UNITS_OF_MEASURE_GROUPED
而不是 grouped_options_for_select(UNITS_OF_MEASURE_GROUPED)
,如下例所示:
<%= form.select :unit_of_measure, UNITS_OF_MEASURE_GROUPED %>.
如果你看 rails guides 你可以找到一个例子。
select
helper
Wraps ActionView::Helpers::FormOptionsHelper#select for form builders:
ActionView::Helpers::FormOptionsHelper#select
requires a collection 作为参数。
已编辑。
可能是你默认获取的隐藏文件的生成 尝试以下
<%= form.select :unit_of_measure, UNITS_OF_MEASURE_GROUPED, {include_hidden: false} %>
详情见Documentation。
我倾向于同意这样一种怀疑,即破坏您的哈希值是罪魁祸首。要找出原因,请尝试更深的冻结:
UNITS_OF_MEASURE_GROUPED = {
dry: %w(oz lb g kg),
liquid: %w(floz gal ml L),
other: %w(each)
}.transform_values(&:freeze).freeze
这将(希望)抛出一个 FrozenError
,以及随附的照明堆栈跟踪,从 app/framework 深处的任何地方都在搞砸。