WedX - журнал о программировании и компьютерных науках

Загрузите PDF из активного администратора

Как пользователь-администратор в своем приложении я могу создать членство и прикрепить файл PDF (используя скрепку)

На мой взгляд, тогда я хотел бы иметь возможность щелкнуть ссылку, чтобы загрузить этот PDF-документ для этого конкретного членства.

Таким образом, Active Admin позволяет вам создать собственное действие (а также сгенерирует для вас маршрут)

 ActiveAdmin.register Membership do
   collection_action :download_pdf, method: :get do

   end
end

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

column 'File' do |f|
  link_to('Download Membership Form', download_pdf_admin_memberships_path)
end

Пытаясь собрать кусочки, у меня есть

collection_action :download_pdf, method: :get do
  membership = Membership.find(params[:id])
  send_data(filename: "#{membership.file_file_name}.pdf",
            type: 'application/pdf'
           )
end

column 'File' do |f|
  link_to('Download Membership Form', download_pdf_admin_memberships_path(f))
end

На данный момент это генерирует URL-адрес https://localhost:3000/admin/memberships/download_pdf.60

и при нажатии получаю ошибку

Couldn't find Membership with 'id'=

Я не уверен, как правильно построить URL-адрес (пройти через идентификатор) и загрузить PDF-файл?

Могу ли я получить идентификатор членства через метод?


  • попробуй link_to('Download Membership Form', download_pdf_admin_memberships_path(f, format: :pdf)) 19.01.2016
  • Боюсь, не работает, см. обновленный вопрос, я получаю сообщение об ошибке Couldn't find Membership with 'id'= как мне передать идентификатор? 19.01.2016
  • Я думаю так: link_to('Download Membership Form', download_pdf_admin_memberships_path(id: object.id, format: :pdf)) 19.01.2016
  • ах, я вижу, id:, поскольку мы ищем идентификатор параметра в вызове метода.. Мне лучше использовать send_data или send_file здесь? я бы подумал send_file ? 19.01.2016
  • Я думаю, что это определенно должно быть send_file - send_file membership.file.path 19.01.2016
  • это здорово, спасибо, единственная проблема сейчас в том, что он загружается, но не открывается :) всегда что-то 19.01.2016
  • значит загруженный файл недействителен, верно? 19.01.2016
  • он загружается, но я не могу открыть его после загрузки, там явно есть данные, так как файл, например, 128 КБ 19.01.2016
  • Хм, не уверен, встречал ли я когда-нибудь такую ​​проблему.. 19.01.2016
  • дайте мне знать, если вы нашли решение, и было ли моей помощи достаточно, чтобы опубликовать его как ответ 19.01.2016
  • сделаю, спасибо, вы очень помогли 19.01.2016
  • на самом деле все в порядке, вы можете опубликовать как ответ, Adobe по какой-то причине завис, типичный 19.01.2016

Ответы:


1

Для загрузки файла лучше использовать send_file :

send_file membership.file.path

Также измените свой link_to для правильной передачи идентификатора объекта, а также укажите format: :pdf:

link_to(
  'Download Membership Form',
  download_pdf_admin_memberships_path(id: object.id, format: :pdf)
)
19.01.2016
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]