Как скачать файл с id params? - PullRequest
1 голос
/ 08 июля 2019

Здравствуйте, я пытаюсь загрузить изображение в формате JPEG на рельсы, проверив, что сообщение существует и восстановив его идентификатор в параметре.

Я пытаюсь что-то, но у меня есть ошибка ... Я показываю вам:

def download
  send_file '/public/uploads/posts/@image/image.jpg', :type => 'image/jpeg', :disposition => 'attachment', :x_sendfile => true
end

private

def set_image
  @image = Post.find(params[:id])
end

В моем контроллере мне нужно в моем маршруте получить загрузку.

И мой link_to:

<%= link_to "Download", download_posts_path %>

Но рельсы говорят мне: «Не могунайти сообщение без ID ".Я не понимаю почему ... У него нет удостоверения личности, но я не знаю почему?

Ответы [ 2 ]

1 голос
/ 09 июля 2019
send_file "/public/uploads/posts/#{@image.image_file_name}/image.jpg", :type => 'image/jpeg', :disposition => 'attachment', :x_sendfile => true

Метод image_file_name может варьироваться в зависимости от вложения, которое вы указали для модели

Лучший способ - использовать URL-адрес для вложения, например

send_file @image.image.url(:original)
1 голос
/ 08 июля 2019

Предполагается, что вы используете set_image в фильтре before_action.

Сначала вы должны передать экземпляр или идентификатор post вашему помощнику маршрута:

Если ваш маршрут принимает параметры, например, /posts/:id/download:

<%= link_to "Download", download_posts_path(@post) %>
<%= link_to "Download", download_posts_path(@post.id) %>

Если нет, вы можете передать его с параметром запроса, например, posts/download/?id=1

<%= link_to "Download", download_posts_path(id: @post.id) %>

Оба решения предоставят вам params[:id] в вашем контроллере. В противном случае params[:id] будет nil, а find вызовет ошибку.

Тогда в действии download что-то не так, как указал @DileepNandanam. Вы вообще не используете свой экземпляр Post (@image), вы просто передаете send_file строку, содержащую "@image", не переменную, а просто строку. Вы можете использовать интерполяцию для построения правильного пути к вашему изображению. Например, если ваш @image имеет :name, который может быть "image.jpg", вы бы сделали это так:

send_file "/public/uploads/posts/#{@image.name}"

Или вы можете назвать ваши изображения с post id как 13.jpg, тогда вы будете делать:

send_file "/public/uploads/posts/#{@image.id}.jpg"

Или даже создать отдельные фордеры с идентификаторами поста:

send_file "/public/uploads/posts/#{@image.id}/image.jpg"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...