如何在Ruby

时间:2015-05-21 22:42:54

标签: ruby dynamic hash key erb

我正在尝试在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,这没什么区别。

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

1 个答案:

答案 0 :(得分:5)

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

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]:这样的东西使用这种语法是无效的,冒号左边的东西不是符号的名称。

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