Включение содержимого переменной в фильтр Haml

#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"> .