相关疑难解决方法(0)

在 Markdown 中使用 ERB 和 Redcarpet

我试图让 Markdown 与 .erb 很好地配合。我想使用 high_voltage 来呈现用 Redcarpet 解析的降价页面(或带有降价部分的普通 .html.erb 文件),并且正在努力让它一起工作。

目前我有一个markdown_template_handler.rb包含以下代码的初始化程序:

class MarkdownTemplateHandler
  def erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def call(template)
    compiled_source = erb.call(template)
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)

    "#{markdown.render(compiled_source.source).inspect}.html_safe;"
  end
end

ActionView::Template.register_template_handler(:md, MarkdownTemplateHandler.new)

Run Code Online (Sandbox Code Playgroud)

但是它在第 7 行失败,compiled_source = erb.call(template)错误代码说“参数数量错误(给定 1,预期为 2)”

我查看了ERB Ruby 文档,但据我了解,call 方法是新方法的派生,它只需要 1 个参数,即文本。但是,当我尝试仅在快速 rails 控制台会话中使用它时,它还需要两个参数。

当我从上面的代码中删除解析 erb 的要求时,一切都按预期工作,所以我认为这与 Redcarpet 不工作没有任何关系。

我正在使用 Rails v6.0.0.rc1 & Ruby v2.5.3p105

任何帮助表示赞赏。

编辑

进一步的研究使我找到了Rails 6.0 ERB ActionView 模板处理程序。这个处理程序的调用方法确实需要两个参数,模板和源。也就是说,在Rails 5.2.3 中,ERB 操作视图模板处理程序调用方法只需要一个参数,即模板。

有人可以指出我在这种情况下找出什么 …

ruby-on-rails erb redcarpet high-voltage ruby-on-rails-6

5
推荐指数
2
解决办法
919
查看次数

Rails 3视图中的i18n markdown文件

我目前正在研究Michael Hartl的Rails教程,同时尝试了本书未涉及的其他一些内容.在完成创建静态页面的第5章之后,我决定将视图代码更改为HAML,使页面国际化,并将静态内容放入单独的(非部分)Markdown文件中,使用RDiscount gem来呈现它们.例如:

应用程序/视图/ static_pages/about.html.haml

- provide(:title, t('.about_us'))
:markdown
  #{render file: "static_pages/about.#{params[:locale]}.md"}
Run Code Online (Sandbox Code Playgroud)

static_pages目录下,我有像about.en.md,about.it.md,about.ja.md等Markdown文件,因此:locale参数中的插值决定了Markdown文件的呈现方式.

我的问题是:

  1. static_pages目录位与降价文件拥挤,那么,有没有任何合理的缺省/最佳实践地点(或许之外的应用程序目录),以保持这些降价文件,在那里他们可以大概由谁也不需要人编辑了解应用程序的内部工作原理?
  2. 有哪些更好的方法可以在视图中实现渲染多语言Markdown文件?我:locale对双弦插值的使用似乎不够优雅.
  3. 有没有办法更改此代码,以便我可以将Ruby变量传递到Markdown文件?我知道我可以,例如,#{language}只需将about.en.md更改为HAML部分(_about.en.html.haml),就可以在Markdown中使用变量,并将代码更改为:

    应用程序/视图/ static_pages/about.html.haml

    - provide(:title, t('.about_us'))
    :markdown
      #{render "about.#{params[:locale]}", language: 'Markdown!'}
    
    Run Code Online (Sandbox Code Playgroud)

    但是,有没有办法在不将Markdown文件更改为其他类型的文件的情况下执行此操作?如果存在这种方式,是推荐还是可行?

markdown haml internationalization railstutorial.org ruby-on-rails-3.2

4
推荐指数
1
解决办法
1416
查看次数