如何在Ruby中动态命名哈希键

6
我正在尝试在erb文件中进行“render”调用,其中哈希的键是动态命名的。例如...
<% object_type_abbr = ["pos", "job_description", "policy", "procedure", "step", "task", "product"] %>

<%= render path.to_s, 
        model_id: @model.id,
        object_type_abbr[i]: orphan,
        row_no: row_no,  
        is_orphan: true 
%>

问题在于该语法未被识别。我已经尝试使用#{ruby变量名称}语法(建议在这里),但是这在HTML中当然不起作用。
我还尝试过object_type_abbr[i].to_sym,但没有任何区别。
我知道这种方法必须存在,但是找不到。

to_sym 返回类似于 :pos 的东西,所以你写的是 :pos: orphan,这不是你应该在任何地方学到的语法。而且因为 pos: orphan:pos => orphan 的简写形式... - 7stud
1个回答

10

一种解决方法是在哈希表中使用 => 符号来表示该项,例如:

model_id: @model.id
object_type_abbr[i].to_sym => orphan,
....

在哈希图中将键映射到值的标准方法是使用key => value记法 (火箭符)。

当您编写 model_id: @model.id时,这是:model_id => @model.id的简写 - Ruby提供这种简写是因为创建键为符号的哈希表非常常见。但是,对于像object_type_abbr[i]: 这样左侧的东西不是符号名称的语法风格,使用此样式的语法是无效的。

当使用=>记法时,键可以是任何表达式,包括一个求值为符号的表达式。


哇,真不敢相信它居然起作用了。谢谢!为什么它会起作用? - crazycoder65
@Taylor 我添加了一些解释。如果这样清楚了,请告诉我! - mikej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接