0

我正在尝试扩展 RedCarpet 降价解析器以使用我在应用程序中创建的媒体库中的图像。

我使用 Cloudinary 作为图像存储/CDN,并且有一个媒体表,用于将图像的公共 id 存储在 Cloudinary 中。这都很好。

我在 /lib 下创建了一个名为 reddress.rb 的文件,其中包含以下代码。我已经使用它一段时间来毫无问题地呈现 Markdown 格式的文本。但是,现在我正在尝试使用 cloudinary 方法使用通过其 ID 引用媒体记录的短代码来扩展降价。

问题是代码在 cloudinary 帮助程序中找不到 cl_image_tag 方法,即使需要 .rb 文件也是如此。

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-使用-Sinatra-

在 ExtendedMarkdownHTML 类中,我同样包含了 Cloudinary Helper。

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

    def preprocess(full_document)
    ...

我还将文件从 /lib 文件夹移到 /app/services,这是在其他地方看到的一些建议。

希望这可以帮助。

于 2014-03-22T04:55:21.837 回答