Как создать ссылку для скачивания

Какой лучший способ создать ссылку для загрузки? Есть ли лучший способ, чем следующее?

Я думал использовать link_to "Download", :controller => ..., :action => ...", :id => ... в представлении.

Добавление match /documents/download/:id => documents#download в route.rb

И в контроллере:

def download
  send_file ...
end 

Кроме того, я хотел бы, если это возможно, чтобы пользователь оставался на той же странице, что и ссылка.

Спасибо.

Ответ 1

Я добавляю действие загрузки как спокойный маршрут в блоке ресурсов. Здесь типичный код для меня:

routes.rb

  resources :things do
    member do
      get :download
    end
  end    

Модель:

  has_attached_file :document,
    :path => ':rails_root/assets/documents/:id/:basename.:extension'
  attr_protected :document_file_name, :document_content_type, :document_file_size

контроллер:

  def download
    send_file @thing.document.path, :type => 'application/pdf', :filename => @thing.permalink
  end

Вид:

  <%= link_to 'Download', download_thing_path(@thing) %>

Это держит пользователя на той же странице и только начинает загрузку с моим предложенным именем (я использую permalink).

Что вы подразумеваете под динамическим сгенерированием? Они загружены вами или созданы вашим приложением на лету?

Ответ 2

Вы можете просто добавить свою логику загрузки в свое действие show и дать ей:

<%= link_to "Download", document_path(document) %>

Я почти уверен, что метод link:/controller/: action/: id не одобряется.

Ответ 3

Я только что создал ссылку Download.mp3 и использовал ее в моем файле .htaccess.

<Files *.mp3>
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</Files>

Я нашел, что это проще, чем любое другое решение.