ユーザーにテキストエリアに Markdown テキストを入力してもらい、投稿すると、対応する html を表示します。Rails には、markdown
メソッドまたは同様に呼び出されたメソッドがあり、ERB ファイルのそのフィールドで呼び出すことができると読みました。
<%= markdown(@post.content) %>
どうやら、Rails はその機能を取り除いたようです。その機能を再び取得するための最良の方法は何ですか? それは私のニーズを解決するようです。
ユーザーにテキストエリアに Markdown テキストを入力してもらい、投稿すると、対応する html を表示します。Rails には、markdown
メソッドまたは同様に呼び出されたメソッドがあり、ERB ファイルのそのフィールドで呼び出すことができると読みました。
<%= markdown(@post.content) %>
どうやら、Rails はその機能を取り除いたようです。その機能を再び取得するための最良の方法は何ですか? それは私のニーズを解決するようです。
Redcarpetを使用して、markdown-html 変換を行います。また、変換をビューから他のオブジェクトに移動します。コールバック( before_save
) を使用するか、オブザーバーを使用できます。
ドキュメントから:
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
:autolink => true, :space_after_headers => true)
markdown.render("This is *bongos*, indeed.")
#=> "<p>This is <em>bongos</em>, indeed</p>"
@post.content_parsed
たとえば、ユーザーが後で投稿を編集できるように、結果を別の列に保存することをお勧めします。また、この方法では、すべてのリクエストで変換を行う必要がありません。
これが私の解決策です
gem "redcarpet"
module MarkdownRenderer
def self.markdown
@@markdown ||=
Redcarpet::Markdown.new(
Redcarpet::Render::HTML.new(
escape_html: true,
hard_wrap: true,
safe_links_only: true,
with_toc_data: true
),
autolink: true,
fenced_code_blocks: true,
no_intra_emphasis: true,
space_after_headers: true,
tables: true
)
end
def self.render(text)
markdown.render(text)
end
end
def markdown(text)
MarkdownRenderer.render(text).html_safe
end
<%= markdown(@post.content) %>