Моё общее эмпирическое правило - сохранять данные в вашей базе данных как можно более «чистыми» и выполнять любые санитарные операции, рендеринг, экранирование или общее копирование как можно ближе к пользователю - обычно с помощью вспомогательного метода или представления. в приложении Rails.
Это послужило мне хорошо по нескольким причинам:
- Различные представления ваших данных могут иметь требования к отображению - если вы в какой-то момент внедрите интерфейс консоли, вам не понадобится вся эта очистка html.
- Хранение всего мусора как можно дальше от базы данных дает понять, кто несет ответственность за его дезинфекцию. Многие инструменты или новые разработчики, поддерживающие ваш код, могут не осознавать, что строки уже очищены, что приводит к двойному экранированию и другим уродствам форматирования. Это также относится к проблеме «разных представлений», поскольку вещи могут в конечном итоге избежать разными способами.
- Когда вы вручную просматриваете свою базу данных, что время от времени будет происходить, приятно видеть вещи в их необработанном виде.
Итак, чтобы рассмотреть ваш конкретный проект, я бы предложил, чтобы ваши пользователи вводили свой текст в виде Markdown и сохраняли его прямо в базе данных, без хука before_save
(который, в дополнение, будет вызываться при создании или обновление, так что вам также не понадобится хук before_update
, если не было чего-то конкретного, что вы хотели при обновлении, но не при создании). Затем я бы создал вспомогательный метод, может быть santize_markdown
, для вашей очистки. Затем вы можете вызвать вспомогательный метод для необработанной уценки и сгенерировать html своего тела из очищенной уценки. Это может происходить в виде или в другом вспомогательном методе в соответствии с вашим вкусом и количеством разных мест, где вы это делали, но я, вероятно, не включил бы это в модель, так как она так специфична для отображения.