如何使用markdown和Redcarpet Gem在我的Rails应用程序中渲染图像?

时间:2014-12-27 05:38:53

标签: ruby-on-rails redcarpet

我在rails中创建了一个博客,我决定使用Redcarpet在markdown中生成博客内容。问题是我无法渲染我的图像。

我尝试过以下markdown语法: ![test](/image.png)

我也尝试过使用html图片代码: <img src="/image.png">

我甚至尝试过嵌入的Ruby图片代码: <%= image_tag "image.png"%>

我的图片位于app / assets / images文件夹中。它与Redcarpet或我的路径名中的选项有关吗?使用我在网上找到的示例我使用了以下帮助方法

def markdown(text)
  options = {

    fenced_code_blocks: true,
    no_intra_emphasis:true,
    lax_html_blocks: true
  }

  extensions = {
    autolink:           true,
    superscript:        true,
    disable_indented_code_blocks: true
  }

  renderer = Redcarpet::Render::HTML.new(options)
  markdown = Redcarpet::Markdown.new(renderer, extensions)

  markdown.render(text).html_safe
end 

我的show.html.erb文件如下所示:

<div class="container-fluid">
<h3><%= @post.title %></h3>
<%=@post.created_at.to_date%>
<p>
<%= markdown(@post.text)%>
<p>
<br>
<%= link_to 'Back to all posts.', posts_path%>
</div>

2 个答案:

答案 0 :(得分:2)

我能够找到解决方案。我花了很多时间尝试那些没有工作的教程,所以要小心。您最好的资源是Redcarpet文档和Paperclip文档。

基本上你需要使用paperclip gem创建一个指向图像的外部链接,并将其插入markdown形式,如下所示:

![my image](/system/images/images/000/000/004/original/1.png?1419796218)

过程如下:

  1. 安装并实施redcarpet以呈现markdown
  2. 安装并实施回形针以存储图像并创建可用于降价的外部链接。
    • 注意:我创建了一个单独的图像&#39;用于存储图像的模型,但您可以将图像附加到现有模型(如帖子)。我更喜欢创建一个单独的图像模型,并让每个实例化的图像存储一个图像。根据我的经验,当尝试将多个图像附加到单个实例化对象(例如“发布”等)时,它会变得混乱。
  3. 从图片中获取链接。为此,我在rails应用程序中创建了一个图像显示页面,然后使用该页面查看不同的图像大小及其各自的URL:
  4. 在views / images / show.html.erb中:

    <p> Normal image size url: <%=@image.image.url%> </p>
    <p><%= image_tag @image.image.url %></p>
    
    <p> Large image Size url: <%=@image.image.url(:large)%> </p>
    <p><%= image_tag @image.image.url(:large) %></p>
    

    上面的代码将显示如下内容:

    Normal image size url: /system/images/images/000/000/004/original/1.png?1419796218

    Large image size url: /system/images/images/000/000/003/medium/1.png?1419796195

    1. 将上面显示的链接复制并粘贴到markdown中,如下所示:

      ![my image](/system/images/images/000/000/004/original/1.png?1419796218)

答案 1 :(得分:0)

你见过how to extend redcarpet to support a media library part 2 他们说要添加图片即时标记你需要做![my avatar](http://lol.cat/1p)并输出<img src="http://lol.cat/1p" alt="my avatar"/>

我希望这会有所帮助。