38

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

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

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

8 に答える 8

83

結局のところ、これを行うための正しい方法(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いる場合、拡張機能を使用して、任意のビューまたは部分をERb補間を使用してMarkdownとしてレンダリングできます.html.md

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
于 2012-04-12T20:28:09.297 に答える
20

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

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

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

  Look, I can **use** #{language}!
于 2010-12-11T19:02:29.317 に答える
4

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

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

于 2012-02-23T12:09:07.253 に答える
4

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

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はmarkdownとしてフォーマットされます

于 2011-11-06T12:18:00.633 に答える
4

すでに提示されているソリューションを積み重ねて、これはRails 3の補間法であり、Hamlの:markdownフィルターとRDiscount gemを使用して、不要なインデントなしで部分からのビューに純粋なMarkdownファイルをレンダリングします。唯一の落とし穴は、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!
于 2012-04-08T09:29:20.587 に答える
2

あなたの答えを活用して、RailsでGitHubフレーバーマークダウン用にレンダリングする宝石を作成しました(HTML :: Pipeline経由):https ://github.com/afeld/html_pipeline_rails

于 2014-02-05T15:34:41.350 に答える
1

これは@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"
于 2015-11-18T11:12:26.850 に答える
0

Rails5でEmbeddedMarkdownを使用できます。EmbeddedMarkdownは、上記の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

于 2016-12-29T13:08:41.097 に答える