0

RedCarpet マークダウン パーサーを拡張して、アプリケーションで作成したメディア ライブラリの画像を使用しようとしています。

Cloudinary をイメージ ストア/CDN として使用しており、イメージのパブリック ID を Cloudinary に格納するメディア テーブルがあります。それはすべて良いことです。

以下のコードを含む reddress.rb というファイルを /lib の下に作成しました。これをしばらく使用して、マークダウン形式のテキストを問題なくレンダリングしています。ただし、現在、cloudinary メソッドを使用して、ID を介してメディア レコードを参照するショートコードでマークダウンを拡張しようとしています。

問題は、.rb ファイルが必要な場合でも、コードが cloudinary ヘルパーで cl_image_tag メソッドを見つけられないことです。

require 'redcarpet'
require 'cloudinary'
require "cloudinary/helper"

class RedDress
    def initialize
    end

    def format_as_html(txt)
        markdown = Redcarpet::Markdown.new(ExtendedMarkdownHTML, :autolink => true, :space_after_headers => true)
        markdown.render(txt)
    end
end

class ExtendedMarkdownHTML < Redcarpet::Render::HTML
    def preprocess(full_document)

        full_document.gsub!(/\[media (\d+)\]/) { |m|
            media = Media.find($1)
            cl_image_tag(media.image_id, :crop => :fill, :width => 80, :height => 80) unless media.nil?
        }
        full_document
    end
end

ライブラリが呼び出され、cl_image_tag が配置されていなくても動作し、サーバーを再起動しました (変更が行われるたびに再起動する必要があります)。

Ruby 2.0.0 で Rails 4 を使用しています。

助言がありますか?

4

1 に答える 1

2

さて、少しいじった後、 http://support.cloudinary.com/entries/25418221-How-do-I-use-the-Cloudinary-helpers-from-theからこれに基づくソリューションを思いつきました-Ruby-GEM-using-Sinatra-

ExtendedMarkdownHTML クラス内に Cloudinary Helper を含めました。

...
class ExtendedMarkdownHTML < Redcarpet::Render::HTML
include CloudinaryHelper

    def preprocess(full_document)
    ...

また、ファイルを /lib フォルダーから /app/services に移動しました。これは、他の場所で見られるアドバイスです。

お役に立てれば。

于 2014-03-22T04:55:21.837 に答える