Это двойной вопрос.
У меня есть приложение RoR (3.0.7), которое принимает пользовательский ввод, например, создание новостной статьи. До сих пор пользовательский ввод был в простом XHTML, поскольку пользователи являются доверенными. Однако создание сообщений на веб-сайте в XHTML является сложной задачей для некоторых пользователей, поэтому мы попытаемся перейти к текстилю.
Для использования текстиля я установил RedCloth.
Поскольку мы не будем преобразовывать уже существующие новостные статьи в текстильные, что, как я знаю, было бы правильным сделать для унифицированных данных, план состоит в том, чтобы использовать RedCloth для контента только после указанной даты.
В представлениях я бы просто использовал условие, которое проверяет дату created_at, а затем вызывает RedCloth перед выводом. Однако это означало бы, что мне пришлось бы перебирать все представления и вставлять условное выражение всякий раз, когда я представляю этот конкретный контент. Возможно, я мог бы даже создать помощника, который минимизировал бы код, который мне пришлось бы копировать.
Вместо того, чтобы делать это и держать его СУХИМ, я решил переместить логику в модель. Модель имеет столбец с именем articlecontent. Я придумал следующий код, который пока работает:
def articlecontent
if !self.new_record? && created_at.to_datetime > 'YYYY.MM.DD'.to_datetime
articlecontent_in_textile = self[:articlecontent]
articlecontent_in_html = RedCloth.new(articlecontent_in_textile, [:filter_html]).to_html
return articlecontent_in_html
else
return self[:articlecontent]
end
end
Итак, мои вопросы:
1) Это правильный путь? Или я должен определить какой-то ViewHelper?
2) Кажется, я не могу вызвать помощника по очистке в модели, возможно, по уважительной причине. Есть ли способ вызвать помощника в модели?
Спасибо Марк