Извлечение YAML из текстового поля - PullRequest
3 голосов
/ 21 января 2011

Метод 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 пользователю?

1 Ответ

0 голосов
/ 22 января 2011

Вы хотите сказать, что хотите, чтобы пользователи могли писать \n, чтобы отмечать новые строки в yaml, который они вводят? Потому что в этом случае то, как вы делаете это сейчас с помощью регулярных выражений, очень просто.

Экранирующая последовательность \n является особенностью строк Ruby. Если вы хотите реализовать его и в интерфейсе yaml веб-формы, регулярное выражение является допустимым способом сделать это.

Вы уверены, что должны заменить двойную косую черту? Я думаю, что это должно появиться как двойной слэш, если вы делаете .inspect.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...