[英]How do I route to a new rails controller action
I'm new to Rails and have the encountered this problem. 我是Rails的新手,遇到了这个问题。
I have a books_controller where I have defined a new action called download: 我有一个books_controller,我在其中定义了一个名为download的新动作:
def download
@book = Book.find(params[:id])
return send_file @book.get_filepath, :type => 'application/pdf', :filename => @book.get_filename
end
My routes.rb is like: 我的routes.rb就像:
resources :books
match '/books(/download(/:id))', :controller => "books", :action => "download"
I would like to create a URL like /books/download/10 to call the download action. 我想创建一个像/ books / download / 10这样的URL来调用下载操作。
I'm not sure how I can create that link. 我不确定如何创建该链接。 I have tried reading the Rails Guide on routing, but am very confused by it.
我试过在路由上阅读Rails指南,但我很困惑。
I have tried 我努力了
<td><%= link_to books_download_path(book) %></td>
and it clearly doesn't work. 它显然不起作用。
undefined method `books_download_path' for #<#<Class:0x682ac40>:0x482cad8>
I'd appreciate any help on this. 我很感激你的帮助。
Thanks 谢谢
PS Maybe /books/10/download makes more sense than /books/download/10 PS Maybe / books / 10 / download比/ books / download / 10更有意义
index.html.erb 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 的routes.rb
Caliberator::Application.routes.draw do resources :authors Caliberator :: Application.routes.draw做资源:作者
resources :books do
get :download, :on => :member, :to => 'books#download'
end
end 结束
For Rails 3, try this 对于Rails 3,试试这个
resources :books do
get :download, :on => :member, :to => 'books#download'
end
Now, in your views, you can use. 现在,在您的视图中,您可以使用。
<%= link_to 'Download', download_book_path(book) %>
This will generate books/10/download
type links. 这将生成
books/10/download
类型链接。
Try following 试试以下
match '/books(/download(/:id))', :controller => "books", :action => "download", :as => "books_download"
Ref:- naming_routes 参考: - naming_routes
你必须这样做:
<%= link_to "Download", download_books_path + "/#{book.id}" %>
For rails 3, you should write: 对于rails 3,你应该写:
resources :books do
member do
get 'download'
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.