我正在尝试扩展RedCarpet markdown解析器,以使用我在应用程序中创建的媒体库中的图像。
我使用Cloudinary作为图像存储/ CDN,并且有一个Media表,用于存储Cloudinary中图像的公共ID。这一切都很好。
我在/ lib下创建了一个名为reddress.rb的文件,其中包含以下代码。我已经使用它一段时间来呈现markdown格式的文本没有问题。但是,现在我正在尝试使用cloudinary方法使用通过其Id引用媒体记录的短代码来扩展markdown。
问题是代码无法在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
正在调用lib,并且没有cl_image_tag就可以了,我已经重新启动了服务器(每次都要进行更改。)
我正在使用Rails 4和Ruby 2.0.0。
有什么建议吗?
答案 0 :(得分: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,这是其他地方的一些建议。
希望这有帮助。