从文本字段中检索YAML

时间:2011-01-21 20:47:45

标签: ruby-on-rails ruby yaml

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

<%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %>

是的,我想要单引号:我想保留显示中的\ n。但问题是,结果,生成的字符串对象被转义:

--- \\nlast_name: Smith\\nfirst_name: Joe\\n

我通过两个正则表达式运行字符串:第一个用一个反斜杠替换双反斜杠。然后接下来将\ n(两个字符)转换为\ n(特殊单个字符)。

所以在我的控制器中:

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

这现在有效,但似乎非常复杂。用户是否有更优雅的方式提交yaml?

1 个答案:

答案 0 :(得分:0)

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

转义序列\n是Ruby字符串的一个特性。如果你想在你的web表单yaml界面中实现它,正则表达式是一种有效的方法。

您确定要进行双斜线更换吗?我认为如果你.inspect,它应该只显示为双斜杠。