クリックすると、特定のリソースに関連付けられたドキュメントのダウンロードが開始される単純なリンクを作成しようとしています。リソース モデルがあり、そのモデルには「ドキュメント」という列があります。リンクをクリックすると、ドキュメントをインラインで正常に表示できますが、ダウンロードしたいと思います。content-types と send_file について読んできましたが、これを完全につなぎ合わせて機能させることはできませんでした。
リンクに使用する必要があると思われるコードは次のとおりです。
<%= link_to 'Download File', :action => "download_file" %>
これによりエラーがスローされます:
ActiveRecord::RecordNotFound in ResourcesController#show id=download_file のリソースが見つかりませんでした
リンクをこれに変更すると、ブラウザでファイルが開きます。
<%= link_to 'Open file', resource.document_url, :target => "_blank" %>
私の ResourcesController には、次のメソッドが定義されています。
def download_file
@resource = Resource.find(params[:id])
send_file(@resource.file.path,
:filename => @resource.file.name,
:type => @resource.file.content_type,
:disposition => 'attachment',
:url_based_filename => true)
end
次のようにroutes.rbにルートを設定しました:
resources :resources do
get 'resources', :on => :collection
end
したがって、このエラーに基づいて、ResourcesController の私の download_file メソッドは、ドキュメントが関連付けられているリソース レコードの ID を特定できないようです。
私は実行しています: Rails 3.2.11 Carrierwave 0.8.0 Ruby 1.9.3-p194
これについての洞察をいただければ幸いです。いくつかの記事を検索しましたが、簡単なチュートリアルを見つけることができませんでした。ありがとう。