Включение содержимого переменной внутри фильтра Haml - PullRequest
7 голосов
/ 06 апреля 2011

Как сделать article.content отфильтрованным по: текстилю?

 - @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>

Ответы [ 2 ]

7 голосов
/ 06 апреля 2011

Внутри фильтра Haml вы используете строковую интерполяцию, чтобы включить код Ruby в вашу разметку.Например:

require 'haml'                              
@x = 42                                               
Haml::Engine.new("%p= @x").render(self)              #=> "<p>42</p>\n"
Haml::Engine.new(":textile\n\t= @x").render(self)    #=> "<p>= @x</p>\n"
Haml::Engine.new(":textile\n\t\#{@x}").render(self)  #=> "<p>42</p>\n"

@content = "alpha\n\n#hi **mom**"
Haml::Engine.new(":textile\n\t\#{@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 голос
/ 06 апреля 2011

Ваш синтаксис выглядит нормально, если все остальное отображается правильно, возможно, это проблема с самоцветами. У вас установлен RedCloth?

Edit: Если подумать, что делает вторая строка? Это может быть причиной вашей проблемы, поскольку я не думаю, что% article.post является правильным синтаксисом HAML, а внутри: текстильный фильтр

...