7

Here is the string which needs to convert into a hash.

"{:status => {:label => 'Status', :collection => return_misc_definitions('project_status') } }"

We can not use eval because eval will execute the method return_misc_definitions('project_status') in the string. Is there pure string operation to accomplish this conversion in Ruby/Rails?

4

1 回答 1

9

如前所述,您应该使用eval. 你关于eval执行的观点return_misc_definitions没有意义。它将以任何一种方式执行。

h1 = {:status => {:label => 'Status', :collection => return_misc_definitions('project_status') } }
# or 
h2 = eval("{:status => {:label => 'Status', :collection => return_misc_definitions('project_status') } }")

这两行之间没有功能差异,它们产生完全相同的结果。

h1 == h2 # => true

当然,如果可以的话,不要使用 ruby​​ 哈希的字符串表示。使用 JSON 或 YAML。它们更安全(不需要eval)。

于 2013-06-04T21:02:54.073 回答