0

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

終わり

4

4 に答える 4

2

Rails 3の場合、これを試してください

resources :books do
  get :download, :on => :member, :to => 'books#download'
end

これで、ビューでを使用できます。

<%= link_to 'Download', download_book_path(book) %>

books/10/downloadこれにより、タイプリンクが生成されます。

于 2012-08-03T05:57:48.057 に答える
0

フォローしてみてください

match '/books(/download(/:id))', :controller => "books", :action => "download", :as => "books_download"

参照:-naming_routes

于 2012-08-03T05:57:17.720 に答える
0

あなたはこのようにそれをしなければなりません:

<%= link_to "Download", download_books_path + "/#{book.id}" %>
于 2012-08-03T06:03:17.520 に答える
0

Rails 3の場合、次のように記述します。

resources :books do
  member do
    get 'download'
  end
end
于 2012-08-03T12:48:04.523 に答える