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?
答案 0 :(得分:0)
您是说您希望用户能够编写\n
来标记他们输入的yaml中的换行符吗?因为在这种情况下,你现在使用regexp的方式非常简单。
转义序列\n
是Ruby字符串的一个特性。如果你想在你的web表单yaml界面中实现它,正则表达式是一种有效的方法。
您确定要进行双斜线更换吗?我认为如果你.inspect
,它应该只显示为双斜杠。