web-dev-qa-db-ja.com

Rails 3でマークダウンを使用してパーシャルを自動的にレンダリングするにはどうすればよいですか?

パーシャルの一部をマークダウンスニペットとして使用したいと思います。標準のRails erbテンプレートを使用してそれらをレンダリングする最も簡単な方法は何ですか?

理想的には、次のようなことをしたいと思います。

app/views/_my_partial.md.erbにパーシャルがある場合:

My awesome view
===============

Look, I can **use** <%= language %>!

私はそのような観点から参照します:

<%= render "my_partial", :language => "Markdown!" %>

次のような出力を取得したい:

<h1>My awesome view</h1>
<p>Look, I can <strong>use</strong> Markdown!</p>
36
Jacob

結局のところ、これを行う正しい方法(tm)はActionView::Template.register_template_handlerを使用しています。

lib/markdown_handler.rb

require 'rdiscount'

module MarkdownHandler
  def self.erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def self.call(template)
    compiled_source = erb.call(template)
    "RDiscount.new(begin;#{compiled_source};end).to_html"
  end
end

ActionView::Template.register_template_handler :md, MarkdownHandler

require 'markdown_handler'(または初期化子)にconfig/application.rbがある場合、拡張子.html.mdを使用して、ERb補間を使用して任意のビューまたは部分をMarkdownとしてレンダリングできます。

app/views/home/index.html.md

My awesome view
===============

Look, I can **use** <%= @language %>!

app/controllers/home_controller.rb

class HomeController < ApplicationController
  def index
    @language = "Markdown"
  end
end
80
Jacob

純粋なマークダウンソリューションではありませんが、 HAMLフィルター を使用してマークダウンや他のマークアップ言語をレンダリングできます。

たとえば、app/views/_my_partial.html.haml

:markdown
  My awesome view
  ===============

  Look, I can **use** #{language}!
20
tjwallace

.html.mdビューを処理する markdown-Rails gemをリリースしました。

ただし、Erbとチェーンすることはできません。静的ビューとパーシャル専用です。 Rubyコードを埋め込むには、:markdownでtjwallaceのソリューションを使用する必要があります。

6
Jo Liss

そのような状況でhamlを使用しない方法を見つけました。

in views/layouts/_markdown.html.erb

<%= m yield %>

app/helpers/application_helper.rb

def m(string)
   RDiscount.new(string).to_html.html_safe
end  

Gemfile

gem 'rdiscount'

したがって、ビューでは、次のように呼び出すことができます。

<%= render :partial => "contract.markdown", :layout => 'layouts/markdown.html.erb' %>

そしてcontract.markdownはマークダウンとしてフォーマットされます

4
Roman Golomidov

すでに提示されているソリューションを積み重ねると、これはRails 3で、Hamlの:markdownフィルターとRDiscountの宝石。唯一の落とし穴は、MarkdownファイルがHamlファイルであるということですが、コピー担当者のような人にとっては問題ではありません。

Gemfile

gem 'rdiscount'

app/views/my_page.html.haml

:markdown
  #{render 'my_partial', language: 'Markdown!'}

app/views/_my_partial.html.haml

My awesome view
===============

Look, I can **use** #{language}!

:language変数をマークダウンファイルに渡す必要がない場合は、マークダウンをHamlファイルにすることで完全になくすことができます。

app/views/my_page.html.haml

:markdown
  #{render 'my_partial.md'}

app/views/_my_partial.md

My awesome view
===============

Sorry, cannot **use** #{language} here!

Markdownファイルの厄介なアンダースコアが気に入らないですか?

app/views/my_page.html.haml

:markdown
  #{render file: 'my_markdown.md'}

app/views/my_markdown.md

My awesome view
===============

Sorry, cannot **use** #{language} here!
4
Paul Fioravanti
2
Aidan Feldman

これは@Jacobに似たバージョンですが、 Redcarpet を使用しています。

module MarkdownHandler
  def self.erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def self.call(template)
    options = {
      fenced_code_blocks:           true,
      smartypants:                  true,
      disable_indented_code_blocks: true,
      prettify:                     true,
      tables:                       true,
      with_toc_data:                true,
      no_intra_emphasis:            true
    }
    @markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, options)
    "#{@markdown.render(template.source).inspect}.html_safe"
  end
end
ActionView::Template.register_template_handler :md, MarkdownHandler

lencioni これを投稿した人への完全なクレジット この要点で

そしてerbを評価したい場合:

erb = ERB.new(template.source).result
@markdown ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML, options)
"#{@markdown.render(erb).inspect}.html_safe"
1
wpp

埋め込みMarkdownはRails 5で使用できます。埋め込みMarkdownは、Jacobが提供するソリューションに基づいています 上記

  1. これらをアプリケーションのGemfileに追加します。
    gem 'coderay' #optional for Syntax Highlighting
    gem 'redcarpet'
    gem 'emd'
  1. bundle install

  2. 次に、ビューを作成しますapp/view/home/changelog.html.mdそしてその中にマークダウンを貼り付けます.mdファイル。

  3. 次のコマンドを使用してホームコントローラーを生成します

    Rails generate controller home

  4. Route.rbに次の行を追加します。

    get '/changelog', :to 'home#changelog'

  5. それで全部です。 http:// localhost:3000/changelog にアクセスして、レンダリングされたマークダウンを確認します

ソース: http://github.com/ytbryan/emd

0
ytbryan