助手中的 HAML 过滤器

mah*_*off 5 ruby haml ruby-on-rails dry filter

辅助函数可以接收一个块yield来渲染该块。有时我希望该块使用过滤器进行规范。例如:

= doc_page title: 'FAQ' do
  :markdown
    # Welcome to the *FAQ*
Run Code Online (Sandbox Code Playgroud)

这并不是那么枯燥,因为我们总是一起编写 doc_page 和 markdown。我可以让辅助方法接受一个块并通过 HAML 过滤器传递它吗?就像是:

= doc_page title: 'FAQ' do
  # Welcome to the *FAQ*
Run Code Online (Sandbox Code Playgroud)

在这个幻想中,doc_page是一个辅助方法,它做一些设置,然后通过降价传递内容,使我们无需在:markdown任何地方声明并使世界成为一个干燥的地方。

Vin*_* V. 5

目前无法在助手中使用过滤器。另一种方法是使用 redcarpet 来解析降价,然后将输出传递给助手。

一个例子是:

= doc_page title: 'FAQ', :markdown do
  ### my markdown

= doc_page title: 'FAQ' do
  normal html
Run Code Online (Sandbox Code Playgroud)

doc_page 的实现将是这样的:

def doc_page(title, markup=:html)

  content = yield

  if markup == :markdown
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
    content = markdown.render(content)
  end

  content
end
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题,因为您在帮助程序中定义了降价过滤器。而且您的haml 中不需要额外的缩进级别。