Rails: send_file не вызывает загрузку, вместо этого ссылки на метод контроллера 'show' - PullRequest
1 голос
/ 10 ноября 2010

В первый раз, используя rails, я пытаюсь создать ссылку на скачивание, чтобы получить что-то из файловой системы.

На мой взгляд, у меня есть

<%= link_to 'Show', upload, :method => :download %>

и мойМетод 'download' в моем контроллере выглядит следующим образом:

def download
   @upload = Upload.find(params[:id])
   send_file '/data_store/50692.pdf'

Это необходимо, потому что у меня есть ограничения на то, кто может просматривать этот pdf, но на этой странице я получаю ссылку на

http://localhost:3000/uploads/10

(10 - это идентификатор этой загрузки)

и на этой странице я получаю сообщение об ошибке

    Unknown action

No action responded to 10. Actions: clearance, create, destroy, download, edit, index, is_admin, new, show, su_required, and update

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

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

В идеале вы должны смотреть вызов Ajax, если хотите остаться на той же странице и предложить пользователю запрос на загрузку, но приведенный ниже код также подойдет.После нажатия на ссылку «скачать» откроется новая вкладка / окно, предложит пользователю запрос на загрузку и закроет вкладку / окно.

Также параметр :method для link_to сообщает ему, какой метод HTTP (POST, GET, DELETE, PUT) использовать.Для ссылки на метод загрузки в вашем контроллере используйте параметр :action.

view
----
<%= link_to 'Show', upload, :action => :download, {:target => "_blank"} %>      

controller
----------
return send_file '/data_store/50692.pdf', :type => "application/pdf", :filename => "50692.pdf"
0 голосов
/ 10 ноября 2010

Я думаю, что это проблема в методе загрузки вызова.

Попробуйте это

<%= link_to "Show",:controller=>'controllername',:action=>'download',:id=>upload.id %>

Вы должны передать имя вашего контроллера в месте "controllername".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...