Rails: преобразование строк текстового поля в <br/">
У меня есть текстовое поле в моей модели под названием "about", которое я пытаюсь отобразить на странице показа, но ни один из разрывов строк не отображается правильно.
Я пробовал несколько вещей, но код, который я, наконец, приземлился:
<%= (h @template.about).gsub("\n", "<br />") %>
К сожалению, Rails, похоже, избегает желаемого HTML и выводит эти разрывы строк как
Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? <br />
Как я могу правильно преобразовать текстовые поля "\n" linebreaks в фактический HTML-код очереди? Я уже пробовал простой формат, но безрезультатно...
Я использую Rails 3, а первые несколько строк "about":
Спасибо за рыбу, ребята! Не так, как хотелось, но... э-э... спасибо?
"Я буду судьей этого, - сказал он!
И теперь, более бесполезная копия, поэтому я могу выделить этот странный почерк, который нашел Аманда.
Подождите! Я имел в виду" странную ошибку..."
Ответы
Ответ 1
попробуйте
<%= simple_format @template.about %>
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Это работает для меня: -\
1.9.3p194 :017 > str = "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks?
1.9.3p194 :018"> \"I'll be the judge of that,\" he said!
1.9.3p194 :019"> And now, more useless copy so I can isolate that weird bud that Amanda found.
1.9.3p194 :020"> Wait! I meant 'weird bug..."
#=> "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? \n\"I'll be the judge of that,\" he said! \nAnd now, more useless copy so I can isolate that weird bud that Amanda found. \nWait! I meant 'weird bug..."
1.9.3p194 :021 > simple_format str
#=> "<p>Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? \n<br />\"I'll be the judge of that,\" he said! \n<br />And now, more useless copy so I can isolate that weird bud that Amanda found. \n<br />Wait! I meant 'weird bug...</p>"
или используя gsub
1.9.3p194 :022 > str.gsub("\n", "<br />")
#=> "Thanks for the fish, guys! Not like I wanted it, but... uh... thanks? <br />\"I'll be the judge of that,\" he said! <br />And now, more useless copy so I can isolate that weird bud that Amanda found. <br />Wait! I meant 'weird bug..."
Ответ 2
<%= (h @template.about).gsub("\n", "<br />").html_safe %>
Помощник h
экранирует текст, чтобы вы не оставались открытыми для атак XSS. Как только этот текст будет экранирован, вы можете gsub
и объявить новую строку как html_safe
.
html_safe
не экранирует, это объявление о том, что строка не должна быть экранирована. Но вы хотите избежать исходной строки, если не уверены, что она не содержит ввода пользователя.