Railsは初めてで、この問題が発生しました。
ダウンロードと呼ばれる新しいアクションを定義したbooks_controllerがあります。
def download
@book = Book.find(params[:id])
return send_file @book.get_filepath, :type => 'application/pdf', :filename => @book.get_filename
end
私のroutes.rbは次のようなものです:
resources :books
match '/books(/download(/:id))', :controller => "books", :action => "download"
ダウンロードアクションを呼び出すために/books/ download/10のようなURLを作成したいと思います。
そのリンクを作成する方法がわかりません。ルーティングに関するRailsガイドを読んでみましたが、非常に混乱しています。
私が試してみました
<td><%= link_to books_download_path(book) %></td>
そしてそれは明らかに機能しません。
undefined method `books_download_path' for #<#<Class:0x682ac40>:0x482cad8>
これについて助けていただければ幸いです。
ありがとう
PSたぶん/books/ 10/downloadは/books/ download/10よりも理にかなっています
index.html.erb
<table>
<% @recent_books.each do |book| %>
<tr>
<!-- <td><%= image_tag(book.get_thumbnail) %></td> -->
<td><%= truncate(book.get_title, :length => 30) %></td>
<td><%= book.get_author %></td>
<td><%= book.get_summary %></td>
<td><%= truncate(book.get_filename, :length => 30) %></td>
<!-- <td><%= link_to 'Download', book %></td> -->
<td><%= link_to "Download", download_book_path(book) %></td>
</tr>
<% end %>
<table>
ルート.rb
Calibreator :: Application.routes.draw do resources:authors
resources :books do
get :download, :on => :member, :to => 'books#download'
end
終わり