Простая модель блога - PullRequest
2 голосов
/ 13 января 2010

Я хочу, чтобы у меня был простой блог, поэтому я создал модель:

   class Post < ActiveRecord::Base
     attr_accessible :title, :body
   end

Я хочу использовать Markdown, но без тегов HTML. Я также хочу всегда поддерживать чистоту базы данных, и моя идея состоит в том, чтобы использовать before_save() / before_update() обратных вызовов для очистки моего ввода и экранирования HTML.

Меня не волнует кэширование и производительность, поэтому я всегда хочу отображать посты, когда это необходимо. Моя идея состоит в том, чтобы следовать модели:

   def body_as_html 
     html_from_markdown(body)
   end

Что вы думаете о таком дизайне? MVC и ActiveRecord являются новыми для меня, и я не уверен в использовании обратного вызова.

Ответы [ 2 ]

2 голосов
/ 13 января 2010

Я не вижу ничего очевидного в этом методе. Кэширование - это очень простая вещь, которую можно включить, если производительность становится проблемой ... важно сделать кеширование полезным, чтобы уменьшить или исключить динамический контент на странице, чтобы кэш не постоянно устаревал. Если вы просто показываете сообщение в блоге, то кэш необходимо восстанавливать только в случае изменения блога или, если кто-то добавляет комментарий (если у вас есть комментарии).

0 голосов
/ 13 января 2010

Моё общее эмпирическое правило - сохранять данные в вашей базе данных как можно более «чистыми» и выполнять любые санитарные операции, рендеринг, экранирование или общее копирование как можно ближе к пользователю - обычно с помощью вспомогательного метода или представления. в приложении Rails.

Это послужило мне хорошо по нескольким причинам:

  • Различные представления ваших данных могут иметь требования к отображению - если вы в какой-то момент внедрите интерфейс консоли, вам не понадобится вся эта очистка html.
  • Хранение всего мусора как можно дальше от базы данных дает понять, кто несет ответственность за его дезинфекцию. Многие инструменты или новые разработчики, поддерживающие ваш код, могут не осознавать, что строки уже очищены, что приводит к двойному экранированию и другим уродствам форматирования. Это также относится к проблеме «разных представлений», поскольку вещи могут в конечном итоге избежать разными способами.
  • Когда вы вручную просматриваете свою базу данных, что время от времени будет происходить, приятно видеть вещи в их необработанном виде.

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

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