2

我第一次使用 Middleman(以及 Ruby 和 Rails),在使用 Redcarpet 作为我的降价处理器和 ERb 进行布局渲染单个页面时,我遇到了一些障碍。

我想使用 Markdown 来设置单个内容块的样式,但是每个页面都会有不止一个内容,样式独特。

除了使用局部,有没有办法在页面的多个区域实例化 Redcarpet 渲染器?所以在 中index.html.erb,会有这样的东西:

<div class="grid5 container">
    <% markdown do %>
    # Some markdown
    <% end %>
</div>

<section class="grid6">
    <% markdown do %>
    ## More markdown
    <% end %>
</section>

我已经尝试根据几个教程构建一个助手 ,但我还不太擅长 Rails。

编辑 我的 config.rb 助手看起来像:

module MD
    def markdown(text)
        Redcarpet.new(text).to_html
    end
end

helpers MD

根据上面链接的 ASCIIcasts,我的 ERb 模板使用与上面类似的代码:

<span class="g6 pre3">
<% markdown do %>
...etc...
<% end %>

但是当我加载页面时出现错误:ArgumentError at /about wrong number of arguments (0 for 1)

4

5 回答 5

4

您定义了 markdown 方法来接收一个名为text. 但是您在视图中提供的是一个块。

为了使事情正常进行,您可以更改markdown在视图中调用辅助方法的方式

<%= markdown 'this is some markdown text in here' %>

或者您更改降价助手以接受块

def markdown
  Redcarpet.new(yield).to_html
end

PS:自 Railscast 以来,Redcarpet 语法发生了一些变化,因此如果您使用的是更新的 gem 版本,则以这种方式实现它是行不通的。

至少从 3.3.4 开始,也许更早,你必须创建一个特定的渲染器,然后使用 markdown 作为参数调用它,即

def markdown
   Redcarpet::Render::XHTML.new.render(yield)
end

可以在这里找到最新的文档:https ://github.com/vmg/redcarpet

于 2013-09-20T20:03:28.797 回答
1

我遇到过同样的问题。上面没有工作。这是一个更简单的解决方案,没有自定义代码。

https://github.com/middleman/middleman/issues/1221#issuecomment-38104894

于 2014-03-19T21:54:13.480 回答
1

这就是我所做的:

helpers do
  def markdown(&block)
    raise ArgumentError, "Missing block" unless block_given?
    content = capture_html(&block)
    concat Tilt['markdown'].new { content }.render
  end
end

它使用默认的 Middleman markdown 渲染。

于 2014-10-01T14:38:24.280 回答
1

markdown在中间人中将字符串转换为 html 的助手

helpers do
    def markdown(content)
        Tilt['markdown'].new(context: @app) { content }.render
    end
end

设置context: @app参数以处理图像、与中间人助手的链接并避免异常。

于 2018-01-31T16:31:25.837 回答
0

我尝试了在这里找到的几种方法,但均未成功。最后,这是对我有用的解决方案:

def markdown(text)
  require 'redcarpet'
  require 'redcarpet/render_strip'
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::StripDown)
  Markdown.new(text).to_html
end
于 2017-02-09T22:45:20.080 回答