Метод serialize позволяет сохранять объект, такой как хеш, в базе данных в виде строки YAML.Однако недавно я обнаружил, что хочу иметь текстовое поле, позволяющее пользователю вводить собственную строку и заставить контроллер создавать хеш из этой строки.
<%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %>
Да, я хочу одинарные кавычки: Iхотите сохранить \ n на дисплее.Но проблема в том, что в результате получаемый строковый объект экранируется:
--- \\nlast_name: Smith\\nfirst_name: Joe\\n
Я запускаю строку через два регулярных выражения: первый заменяет двойной обратный слеш одним обратным слешем.Затем next преобразует \ n (два символа) в \ n (специальный одиночный символ).
Итак, в моем контроллере:
yhash = YAML.load(params[:form][:yaml].gsub(/\\\\/, "\\").gsub(/\\n/, "\n"))
Теперь это работает, но выглядит ужасно запутанным.Есть ли более элегантный способ отправить yaml пользователю?