Ruby on rails 如何在ruby/rails中不使用eval将字符串转换为哈希?

Ruby on rails 如何在ruby/rails中不使用eval将字符串转换为哈希?,ruby-on-rails,ruby,string,hash,Ruby On Rails,Ruby,String,Hash,下面是需要转换为散列的字符串 "{:status => {:label => 'Status', :collection => return_misc_definitions('project_status') } }" 我们不能使用eval,因为eval将执行方法返回字符串中的杂项定义(“项目状态”)。在ruby/rails中是否有纯字符串操作来完成此转换?谢谢您的帮助。如前所述,您应该使用eval。你关于eval执行return\u misc\u定义的观点毫无意义。它将以

下面是需要转换为
散列的
字符串

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

我们不能使用
eval
,因为
eval
将执行方法
返回字符串中的杂项定义(“项目状态”)
。在ruby/rails中是否有纯字符串操作来完成此转换?谢谢您的帮助。

如前所述,您应该使用
eval
。你关于
eval
执行
return\u misc\u定义的观点毫无意义。它将以任何方式执行

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
)。

您可以举一个例子,说明如何创建哈希并在过程中不调用该方法吗?如果您使用
eval()
,请确保尝试评估的哈希中没有用户输入。假设一个用户发布如下哈希:
{:a=>user.delete\u all}
!这个用例是什么?你的绳子是从哪里来的?我觉得这样做不是个好主意。必须有更好的方法以更安全的方式输入数据。字符串来自数据表,散列用于在.html.erb上组成表单。我认为应该重新打开此文件,因为问题已被重新设置为未经评估。我想把一个自由文本值转换成一个散列,当然eval不是一个选项。还有对散列输入的进一步处理,并使用它在.html.erb上生成表单。因此,如果在string=>hash转换期间方法的eval生效,那么rails将出现语法错误:放置,:url=>搜索结果| url do | f |%>