如何在轨道上的ruby中正确显示数据库中的图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在轨道上的ruby中正确显示数据库中的图像相关的知识,希望对你有一定的参考价值。

我是铁杆上的红宝石新手。这里我试图从数据库显示图像。为此,我利用这里找到的link解决方案。但是当我运行我的脚本时,它会显示错误

No route matches {:action=>"show", :controller=>"attachments_controller", :id=>17}请问我的路线有什么问题。路线

Rails.application.routes.draw do


   resources :attachments, only: [:index, :new, :create, :destroy]
   root "attachments#create"

   get "attachments/show" => "attachments#show"

end

attachments_controller

class AttachmentsController < ApplicationController
  def show
    @attachment = Attachment.find(params[:id])
    send_data @attachment.data, :filename => @attachment.filename, :type => @attachment.content_type
  end
end

show.html

<%= image_tag url_for(:controller => "attachments_controller", :action => "show", :id => @attachment.id) %>
答案

您提供的错误消息指出:

No route matches {:action=>"show", :controller=>"attachments_controller", :id=>17}

您提供的路线文件显示您创建的路线:

resources :attachments, only: [:index, :new, :create, :destroy]
get "attachments/show" => "attachments#show"

运行rake路线将显示您已在第一行创建了4条路线,以及响应“附件/节目”的路线。如果你真的想要定义这样的路线,你应该尝试:

get "attachments/:id", to: "attachments/show"

你的第一条路线只响应show这个词,并且不提供参数。最后一条路线将采用附件之后的任何内容,并将其作为名为“id”的参数传递给附件控制器的show动作。

当然,最简单的方法就是摆脱这一切,只需将第一条路线改为:

resources :attachments, only: [:index, :new, :create, :destroy, :show]

让rails为你创建show route与手动定义它完全相同,显然读起来要好得多

另一答案

更改

<%= image_tag url_for(:controller => "attachments_controller", :action => "show", :id => @attachment.id) %>

<%= image_tag url_for(:controller => "attachments", :action => "show", :id => @attachment.id) %>

以上是关于如何在轨道上的ruby中正确显示数据库中的图像的主要内容,如果未能解决你的问题,请参考以下文章

编程语言“在轨道上”意味着啥?

试图在轨道上安装红宝石

在轨道上反应/反应国际

无法在轨道上的可安装引擎中加载模型

滑轨电视功能与特点

使用has_many创建表分类:through用于类别和帖子