В Rails, как я могу разрешить html в текстовой области?

У меня есть приложение Rails (блог), которое я создаю. Очень простые вещи. В моей области содержимого у меня есть текстовая область для содержимого сообщения. Мне нужно включить некоторый html в текстовую область (ссылки, форматирование и т.д.).

<%= f.text_area :content %>

Есть ли другой тег, который я могу использовать вместо text_area, который позволит мне это сделать?


person Norm    schedule 14.05.2010    source источник
comment
Вы хотите, чтобы ваши пользователи могли вводить HTML в текстовое поле, или вы действительно хотите включить в текстовое поле свой собственный HTML — т. е. кнопки, которые создают ссылки и т. д.?   -  person dnch    schedule 10.07.2011


Ответы (6)


Вы пробовали это в представлениях?

 <%= content.html_safe %>
person MorningHacker    schedule 10.07.2011

Это старый вопрос, но я думаю, что для этого есть довольно простой помощник: sanitize. Я предполагаю, что вы захотите отобразить теги HTML, введенные пользователем. Для этого сохраните содержимое в виде строки и визуализируйте его как HTML с помощью sanitize.

Пример использования:

sanitize @post, tags: %w(strong em a code pre h2 h3 p blockquote ul ol li br),
                attributes: %w(href class)

Опция tags позволяет указать, какие теги использовать, а также атрибуты html.

person steady_daddy    schedule 05.04.2016
comment
Это правильный ответ! Версии .html_safe позволяют использовать все теги html (включая теги <script>!) - person Jeremy Moritz; 03.12.2017

Безопасный метод HTML на самом деле .html_safe. Только что проверил на текстовом поле.

Например:

<%= @item.description.html_safe %>
person Mike    schedule 14.09.2011
comment
Как в этом случае избежать XSS-скриптинга, а если пользователь поставит какие-то теги скрипта? - person shajin; 09.11.2015

Вы ищете что-то похожее на варианты полужирный, курсив, ..., которые вы получаете при публикации в stackoverflow? Если это так, я бы предложил Markitup, плагин текстового редактора для jQuery. Как только вы настроите эту настройку, вы сможете вводить разметку в текстовую область (например, Markdown, bbcode, ...). Когда вы действительно отображаете результат на странице, вам просто нужно, чтобы Ruby проанализировал язык разметки, который вы выбрали.

E.g.

<%= @user.bio.bb_code %>

Используя этот метод, вы позволяете пользователям безопасно вводить стилизованный текст.

person ghayes    schedule 10.07.2011
comment
Но как разрешить только определенный html? Типа включая списки, но исключая, не знаю, скажем, таблицы? - person dee; 04.04.2013
comment
Вы ищете Sanitize. apidock.com/rails/ActionView/Helpers/SanitizeHelper/sanitize - person ghayes; 09.04.2013

В грядущей версии Rails 6 вы сможете использовать новый тег rich_text_area для создания редактора форматированного текста в своих формах следующим образом:

<%= form_with(model: article) do |f| %>
  <div class="field">
    <%= f.label :content %>
    <%= f.rich_text_area :content %>
  </div>
<% end %>

См. Руководство по Action Text Rails

person MSC    schedule 15.02.2019

Вероятно, вам нужен text_area_tag.

person x1a4    schedule 14.05.2010
comment
Я заставил text_area_tag работать, однако это все еще не позволяло мне вводить html в текстовую область. - person Norm; 14.05.2010
comment
Если это помогло, но не дало полного ответа на вопрос, отредактируйте свой вопрос и добавьте дополнительную информацию, показывающую, что вы изменили. Добавьте несколько фиктивных выходных данных, показывающих, что вы хотите увидеть, и мы сможем помочь вам больше. - person the Tin Man; 21.11.2010