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

cra*_*r65 2 ruby hash key erb dynamic

我正在尝试在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 
%>
Run Code Online (Sandbox Code Playgroud)

问题是这种语法无法识别.我已尝试使用#{ruby var name}语法(此处建议),但当然这不适用于HTML.

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

我知道这必须存在,但找不到它.

mik*_*kej 5

一种解决方案是=>在哈希中使用该条目的符号,例如

model_id: @model.id
object_type_abbr[i].to_sym => orphan,
....
Run Code Online (Sandbox Code Playgroud)

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

当你写model_id: @model.id这是速记的时候:model_id => @model.id- Ruby提供了这个简写,因为创建密钥是符号的哈希是一个常见的用例.但是对于类似于object_type_abbr[i]:冒号左边的东西不是符号名称的东西,使用这种语法是无效的.

使用=>表示法时,键可以是任何表达式,包括计算符号的表达式.