ruby on rails添加新路线

时间:2010-04-26 21:00:35

标签: ruby-on-rails

我有一个RoR应用程序日志,类似于书店应用程序,我的logs_controller具有所有默认操作:索引,显示,更新,创建,删除..

现在我需要添加新动作:toCSV,我在logs_controller中定义它,并在config / routes中添加新路由:

map.resources :logs, :collection => { :toCSV => :get }.

来自irb,我检查了路线,看到已添加的新路线:

>> rs = ActionController::Routing::Routes
>> puts rs.routes
GET    /logs/toCSV(.:format)?                   {:controller=>"logs", :action=>"toCSV"}

然后在shell中运行'rake routes'命令,它返回:

toCSV_logs GET    /logs/toCSV(.:format)         {:controller=>"logs", :action=>"toCSV"}
一切似乎都有效。最后在我的视图代码中,我添加了以下内容:

link_to 'Export to CSV', toCSV_logs_path

在浏览器“http://localhost:3000/logs/toCSV”中访问它时,它抱怨道: 找不到ID = toCSV

的Log

我检查了脚本/服务器,看到了这个:

ActiveRecord::RecordNotFound (Couldn't find Log with ID=toCSV):
  app/controllers/logs_controller.rb:290:in `show'

当我点击该链接时,它会将其指向动作'show'而不是'toCSV',因此它将'toCSV'作为一个id ...任何人都知道为什么会发生这种情况?并解决它?谢谢......

3 个答案:

答案 0 :(得分:2)

map.resources :logs, :collection => { :toCSV => :get }

我认为这很完美。每次更改config / routes.rb时都必须重新启动服务器 这个答案很难,但很重要。

答案 1 :(得分:1)

这可以解决方法: 创建命名资源:

map.toCSV 'logs\toCSV', :controller => :logs, :action => :toCSV

我真的很抱歉,我忘了提到要点!

在您看来应该是:

link_to 'Export to CSV', toCSV_path

此外,这些命名路由会派上用场,特别是在涉及身份验证时。例如,在注册过程中,您可以将用户定向到\user\new,而不是将用户定向到\signup。它更友好。

多数民众赞成!!

它更简单,它的工作原理。干杯! :)

答案 2 :(得分:0)

从routes.rb中删除map.resources行,然后运行rake路由。如果您看到route / logs /:id,那么该路径应该被删除。