Ruby on rails 从文本字段检索YAML

Ruby on rails 从文本字段检索YAML,ruby-on-rails,ruby,yaml,Ruby On Rails,Ruby,Yaml,serialize方法允许像散列这样的对象作为YAML字符串存储在数据库中。然而,我最近发现自己想要一个文本字段,允许用户输入自己的字符串,并让控制器创建该字符串的散列 <%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %> 我通过两个正则表达式运行该字符串:第一个正则表达式将双反斜杠替换为单反斜杠。然后,下一步将\n(两个字符)转换为\n(特殊的单个字符) 所以在我的控

serialize方法允许像散列这样的对象作为YAML字符串存储在数据库中。然而,我最近发现自己想要一个文本字段,允许用户输入自己的字符串,并让控制器创建该字符串的散列

<%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %>
我通过两个正则表达式运行该字符串:第一个正则表达式将双反斜杠替换为单反斜杠。然后,下一步将\n(两个字符)转换为\n(特殊的单个字符)

所以在我的控制器中:

yhash = YAML.load(params[:form][:yaml].gsub(/\\\\/, "\\").gsub(/\\n/, "\n"))

这一点现在可以实现了,但似乎非常复杂。用户提交yaml是否有更优雅的方式?

您是说希望用户能够编写
\n
来标记他们正在输入的yaml中的换行符?因为在这种情况下,现在使用regexps的方式非常简单

转义序列
\n
是Ruby字符串的一个特性。如果您也希望在web表单yaml接口中实现它,则regexp是一种有效的方法


你确定要做双斜杠替换吗?我认为如果你做
,它应该只显示为双斜杠。检查

你能更简洁地重新表述一下吗?你能解释一下为什么要这样做吗?Rails转义此文本以避免安全漏洞攻击。使用用户输入的串行代码创建数据结构,并相信这可能是危险的。似乎这方面的任何用例都最好用另一种方式来完成。+1我同意。这里有一个真正的“利用漏洞”的臭味。生成的结构只是用来定义解析指令,我希望能够使用表单动态“测试”解析指令。我想我也可以创建一个regex输入表单。
yhash = YAML.load(params[:form][:yaml].gsub(/\\\\/, "\\").gsub(/\\n/, "\n"))