у меня есть один файл почтовой программы с именем schedule_mailer.html.erb в том, что я пытаюсь использовать вспомогательный метод, из которого я отображаю содержимое
в scheudle_mailer.html.erb
<p style='font-size:15px;margin:0 25px 20px 25px' >
<%= body_text_tag() %>
</p>
в helper.rb
мне нужно отправить строку, которая включает <b>
, а также <br>
но получаю по почте как <b>
и сам тег <br>
.
мой вспомогательный метод
def body_text_tag()
body = "This email to inform you that"
if @creation
body + "your hotel schedule has been created <br>
<b>timings :</b> #{@timings}, <br>
<b>Room number :</b> #{@room number},<br>
....
....
....
elsif ....
.....
end.
поскольку я пробовал tag(:br) внутри строки, даже несмотря на то, что он отображает почту с самим тегом(:br) вместо строки разрыва. как приблизить такого рода теги в строке к HTML?
@spickermann, поскольку один и тот же контент использовался в нескольких шаблонах электронной почты с одинаковыми переменными экземпляра, поэтому я пытаюсь реализовать с помощью помощника
Как говорит @spickermann, вы должны вместо этого писать частичные фрагменты в ERB.
Причина, по которой это не работает, заключается в том, что в Rails, когда вы добавляете обычную строку в безопасный буфер, она автоматически экранируется для предотвращения XSS-атак.
irb(main):076:0> "<b>Hello".html_safe + "World</b>"
=> "<b>HelloWorld</b>"
Если вы хотите создать текст, содержащий HTML-теги из помощника, вам нужно пометить части, которые являются HTML-тегами, как безопасные:
"<b>".html_safe + @timings + "</b>".html_safe
Не делай:
"<b>#{ @timings }</b>".html_safe
Если вы на самом деле не знаете, что контент на самом деле безопасен и не содержит пользовательского ввода.
Вот что помощники тегов делают для вас автоматически:
content_tag(:b, @timings)
tag.b(@timings)
Но этот код, скорее всего, вообще не принадлежит хелперу. Используйте представление или частичное и напишите его в ERB.
одно из решений, которое я попробовал и сработало для меня, - это использовать html_safe в почтовой программе. как <%= body_text_tag().html_safe %>
Это мой друг, как вы получаете атаку XSS. Вы действительно знаете, что вся строка безопасна? Я предполагаю, что нет. makandracards.com/makandra/2579-how-to-use-html_safe-correctly
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Почему бы вам просто не использовать ERB напрямую в этом случае или частично для каждого случая? Зачем вызывать помощника из ERB и создавать HTML с конкатенацией строк?