0

Ruby on Rails アプリのマークダウンで Ruby を使用することはできますか? 私は RedCarpet gem を使用しており、アプリケーション コントローラーには次のものがあります。

class ApplicationController < ActionController::Base
  before_filter :get_contact_info

  private
    def get_contact_info
      @contact = Contact.last
    end
  end

これがContactのスキーマです

create_table "contacts", :force => true do |t|
  t.string   "phone"
  t.string   "email"
  t.string   "facebook"
  t.string   "twitter"
end

作業する連絡先情報があります。マークダウンレンダラーに <%= @contact.phone %> をプレーンテキストではなく @contact.phone の値としてレンダリングするように指示する方法はありますか? または、そのためにマークダウン以外のものを使用する必要がありますか?

編集1:

ここでマークダウンをレンダリングします:

アプリ/ヘルパー/application_helper.rb

def markdown(text)
  options = [:hard_wrap, :filter_html, :autolink, :no_intraemphasis]
  Redcarpet.new(text, *options).to_html.html_safe
end

アプリ/ビュー/サイト/show.html.erb

<%= markdown(site.description) %>

編集2:

これが私の解決策でした、ありがとう。あなたのコードをマークアップ ヘルパーに統合しました。これは今のところ機能しているようです。

def markdown(text)
  erbified = ERB.new(text.html_safe).result(binding)
  options = [:hard_wrap, :filter_html, :autolink, :no_intraemphasis]
  Redcarpet.new(erbified, *options).to_html.html_safe
end
4

1 に答える 1

2

Markdown を ERb で前処理し、その結果を RedCarpet に渡すことができます。次のようなヘルパーメソッドに入れることをお勧めします。

module ContactsHelper
  def contact_info(contact)
    content = "Hello\n=====\n\nMy number is <%= contact.phone %>"
    erbified = ERB.new(content).result(binding)
    Redcarpet.new(erbified).to_html.html_safe
  end
end

コンテンツが多い場合は、上記のように大量の HTML を文字列に埋め込むのではなく、パーシャルを作成してそのパーシャルをレンダリングすることを検討することもできますが、それはあなた次第です。

于 2012-04-13T23:27:29.227 に答える