简体   繁体   English

如何路由到新的rails控制器操作

[英]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.

相关问题 如何将特定的控制器动作路由到Rails中的特定表单? - How do i route a particular controller action to a particular form in rails? Rails 3-新的控制器动作路线 - Rails 3 - new controller action route 将表单路由到Ruby on Rails中的新控制器操作 - Route a form to new controller action in Ruby on Rails 如何将操作路由到Rails 3中的应用程序控制器? - How do you route an action to the application controller in Rails 3? 如何在Rails 2.3和3中路由:collection以使用/ controller / action /:id? - How do I route :collection to use /controller/action/:id in rails 2.3 & 3? 如何从Rails的控制器中访问路由信息(HTTP动词,动作名称等)? - How do I access the route information (HTTP verb, action name, etc . . .) from within a controller in Rails? Rails 4-如何基于当前路径显示同一控制器动作的不同视图? - Rails 4 - How do I show a different view for the same controller action, based on the current route? 如何将编辑表单路由到控制器中的update操作? (轨道应用) - How do I route an edit form to the update action in my controller? (Rails app) 如何创建Rails控制器动作? - How do I create a rails controller action? Rails-我需要在控制器中定义“新”动作吗 - Rails - Do I need to define 'new' action in controller
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM