Атрибут рендеринга в двух разных форматах - PullRequest
0 голосов
/ 02 марта 2019

У меня есть объект, у которого есть атрибут, использующий язык уценки в течение последних нескольких лет, и недавно этот атрибут теперь переключен на использование html.Как отобразить все описания прошлых кампаний на языке разметки и как отобразить все описания новых кампаний с помощью .html_safe

Html_safe

<h6 class="text-muted" itemprop="description">
    <%= @campaign.product_description.html_safe %>
</h6>

Уценка

<h6 class="text-muted" itemprop="description">
  <%= Campaign::Format @campaign.product_description, {render_html: true} %>
</h6>

Как я могу сделать оба?Таким образом, для всех старых кампаний он отображает разметку, а для новых кампаний - HTML.Когда я включаю html_safe и разметку в той же строке, это делает только разметку, а не HTML из редактора WYSIWYG.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Сначала я подумал, что я бы засыпил вашу БД, преобразовав все старые записи в новый формат.

В противном случае создайте вспомогательный метод представления в app/helpers/application_helper.rb что-то вроде:

def description_text campaign
  if campaign.created_at > Time.new(2019,3,1).in_time_zone
    campaign.product_description.html_safe
  else
    Campaign::Format campaign.product_description, {render_html: true}
  end
end

Обратите внимание, что вы, вероятно, также можете обнаружить HTML-код в строке, если вы предпочитаете его по времени, например:

def description_text text
  if text.starts_with? "<html" # or whatever
    # ...
0 голосов
/ 02 марта 2019

Несколько вариантов:

  1. Добавьте флаг к своим кампаниям.Что-то вроде uses_html_description.Установите его значения соответственно.И включите это в представлении.
  2. Выполните миграцию данных и замените все описания в старом формате новым форматом html.

Между этими двумя я бы пошел с последним.

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