#ruby-on-rails #haml
#ruby-on-rails #haml
Вопрос:
Как сделать article.content
отфильтрованный по :textile ?
- @articles.each do |article|
%article.post
%header=article.name
%p
:textile
=article.content
%footer
вывод
<article class="post">
<header>game</header>
<p>
</p><p>=article.content</p>
<p></p>
<footer></footer>
</article>
Ответ №1:
Внутри фильтра Haml вы используете интерполяцию строк для включения кода Ruby в вашу разметку. Например:
require 'haml'
@x = 42
Haml::Engine.new("%p= @x").render(self) #=> "<p>42</p>n"
Haml::Engine.new(":textilent= @x").render(self) #=> "<p>= @x</p>n"
Haml::Engine.new(":textilent#{@x}").render(self) #=> "<p>42</p>n"
@content = "alphann#hi **mom**"
Haml::Engine.new(":textilent#{@content}").render(self)
#=> "<p>alpha</p>n<p>#hi <b>mom</b></p>n"
Редактировать: мой предыдущий ответ вводил в заблуждение относительно новых строк в содержимом из-за моего некорректного тестирования. Как видно выше, новые строки во включенном контенте обрабатываются напрямую.
Таким образом, ваш шаблон Haml должен просто выглядеть следующим образом:
- @articles.each do |article|
%article.post
%header=article.name
:textile
#{article.content}
%footer
Обратите внимание, что я удалил ваш %p
тег, окружающий вашу разметку, поскольку Textile вводит свои собственные оболочки для абзацев (даже для однострочного содержимого).
Комментарии:
1. @wizztjh Мой ответ был неправильным; пожалуйста, смотрите обновленный пример выше, показывающий, что он должен «просто работать» так, как вам нравится.
Ответ №2:
Ваш синтаксис кажется прекрасным, если все остальное отображается правильно, возможно, это проблема с gem. У вас установлен RedCloth?
Редактировать: С другой стороны, что делает вторая строка? Это может быть причиной вашей проблемы, поскольку я не думаю, что %article.post является правильным синтаксисом HAML, а фильтр :textile находится внутри него
Комментарии:
1. Я думаю,
%article.post
генерирует<article class="post">
.