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

How to Dynamically name a Hash key in Ruby

我正在尝试在一个 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 var name} 语法(建议here),当然这在HTML 中不起作用。

我也试过object_type_abbr[i].to_sym,没什么区别。

我知道这一定存在,但找不到。

一种解决方案是对散列中的条目使用 => 表示法,例如

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

将键映射到散列中的值的标准方法是使用 key => value(火箭)表示法。

当你写 model_id: @model.id 时,这是 shorthand for :model_id => @model.id - Ruby 提供了这个 shorthand 因为在键是符号的地方创建散列是这样的常见用例。但是将这种语法风格用于类似 object_type_abbr[i]: 的东西是无效的,其中冒号左边的东西不是符号的名称。

当您使用 => 表示法时,键可以是任何表达式,包括计算结果为符号的表达式。