как правильно отобразить изображение из базы в ruby ​​на рельсах - PullRequest
0 голосов
/ 20 апреля 2019

Я новичок в рубине на рельсах. Здесь пытаюсь отобразить изображение из базы данных. Для этого я использую решение, найденное здесь ссылка . но когда я запускаю свой скрипт, он отображает ошибку

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) %>

Ответы [ 2 ]

3 голосов
/ 20 апреля 2019

В сообщении об ошибке, которое вы указали, указано:

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

В файле маршрутов, который вы указали, показаны созданные вами маршруты:

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

Выполнение маршрутов рейка покажет, что вы создали4 маршрута в первой строке, плюс маршрут, который отвечает на «вложения / шоу».Если вы действительно хотите определить маршрут следующим образом, попробуйте:

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

Ваш первый маршрут отвечает только на слово show и не содержит параметров.Последний маршрут будет принимать все, что идет после вложений, и передавать его в действие show контроллера вложений в качестве параметра с именем id.

Конечно, самый простой способ сделать все это - избавиться отвсе это, и просто измените первый маршрут на:

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

Позволить рельсам создать маршрут показа для вас точно так же, как и его определение вручную, и, очевидно, читается намного лучше

0 голосов
/ 20 апреля 2019

изменение

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

до

<%= image_tag url_for(:controller => "attachments", :action => "show", :id => @attachment.id) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...