2012-08-03 86 views
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" 

我想創建一個URL像/書籍/下載/ 10來調用下載操作。

我不知道如何創建該鏈接。我曾嘗試閱讀Rails指南的路由,但我很困惑。

我已經試過

<td><%= link_to books_download_path(book) %></td> 

,它顯然是行不通的。

undefined method `books_download_path' for #<#<Class:0x682ac40>:0x482cad8> 

我很感謝這方面的幫助。

謝謝

P.S.也許/書籍/ 10 /下載更有意義比/書籍/下載/ 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> 

的routes.rb

Caliberator :: Application.routes.draw做 資源:作者

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

回答

2

對於Rails 3中,試試這個

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

現在,在你的意見,你可以使用。

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

這將生成books/10/download類型的鏈接。

+0

我已經更新了我的路線,說 資源:書籍 資源:書籍做 得到:下載:關於=>:成員:於=> 「的書#下載」 結束 和我的觀點說 <%=的link_to download_book_path(書)%> 但是,當我去/書籍,我得到 沒有路線匹配{:controller =>「books」,:action =>「download」} 但是,耙路線顯示 download_book GET /books/:id/download(.:format)books#download 我現在更困惑:( 我在做什麼錯? – Srini 2012-08-03 06:11:07

+0

您在我建議的代碼上方添加了'resources:books'。刪除資源:書籍行並重試。 – 2012-08-03 06:16:49

+0

喜Kulbir,刪除資源:書沒有幫助,我仍然在/書上得到相同的消息 – Srini 2012-08-03 06:18:28

0

嘗試以下

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

參考: - naming_routes

+0

這一工程! 如何將URL更改爲/ books/10/download? – Srini 2012-08-03 06:16:27

+0

或只是匹配/書籍/:編號/下載',「評論#下載」,:as =>「books_download」' – Salil 2012-08-03 06:24:03

+0

我得到沒有路線匹配{:controller =>「books」,:action =>「download 「} – Srini 2012-08-03 06:30:34

0

你要做這樣的:

<%= link_to "Download", download_books_path + "/#{book.id}" %> 
0

對於軌道3,你應該寫:

resources :books do 
    member do 
    get 'download' 
    end 
end