Удаление HTML-разметки из строки перевода

У меня есть несколько переводов, которые я использую в своих взглядах. Эти переводы иногда возвращают очень простую HTML-разметку в них -

t("some.translation")
#=> "This is a translation <a href="/users">with some</a> markup<br />"

(Примечание: я использую этот фантастический камень, чтобы легко вставлять разметку и, в частности, ссылки, в мои переводы)

Что если в некоторых случаях я хотел бы удалить теги HTML, например, когда я работаю со строкой перевода в моих тестах RSpec. Есть ли функция HTML strp, которая будет компилировать и удалять эту разметку?

t("some.translation").some_html_strip_method
#=> "This is a translation with some markup"

Спасибо!

2 ответа

Вы можете попробовать strip_tags из ActionView::Helpers::SanitizeHelper

strip_tags("Strip <i>these</i> tags!")
# => Strip these tags!

strip_tags("<b>Bold</b> no more!  <a href='more.html'>See more here</a>...")
# => Bold no more!  See more here...

strip_tags("<div id='top-bar'>Welcome to my website!</div>")
# => Welcome to my website!

В зависимости от того, где вы его используете.

Метод strip_tags не работает в контроллерах, моделях или библиотеках

Появляется ошибка о том, что white_list_sanitizer не определен в классе, в котором вы его используете.

Чтобы обойти это, используйте:

ActionController::Base.helpers.strip_tags('string')

Чтобы сократить это, добавьте что-то вроде этого в инициализатор:

class String
  def strip_tags
    ActionController::Base.helpers.strip_tags(self)
  end
end

Затем позвоните с помощью:

'string'.strip_tags

Но если вам нужно использовать его только в VIEW, просто:

<%= strip_tags(t("some.translation"))  %>
Другие вопросы по тегам