【问题标题】:ruby on rails adding new routeruby on rails 添加新路线
【发布时间】:2011-02-12 14:19:18
【问题描述】:

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

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

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

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

>> rs = ActionController::Routing::Routes >> 放置 rs.routes 获取 /logs/toCSV(.:format)? {:controller=>"logs", :action=>"toCSV"}

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

toCSV_logs GET /logs/toCSV(.:format) {:controller=>"logs", :action=>"toCSV"}

似乎一切正常。最后在我的视图代码中,我添加了以下内容:

link_to '导出到 CSV', toCSV_logs_path

在浏览器'http://localhost:3000/logs/toCSV'中访问它时,它抱怨: 找不到 ID=toCSV 的日志

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

ActiveRecord::RecordNotFound(找不到 ID=toCSV 的日志): app/controllers/logs_controller.rb:290:in `show'

似乎当我单击该链接时,它会将其定向到操作“显示”而不是“toCSV”,因此它将“toCSV”作为一个 ID...有人知道为什么会发生这种情况吗?并修复它?谢谢...

【问题讨论】:

  • 什么轨道版本?并在控制器中显示您的 toCSV 方法
  • 你可能有类似这样的日志 GET /logs/:id(.:format) {:controller => "logs, :action", :action=>"show"}

标签: ruby-on-rails


【解决方案1】:
map.resources :logs, :collection => { :toCSV => :get }

我认为这是完美的。每次更改 config/routes.rb 时都必须重新启动服务器 虽然没有答案,但它很重要。

【讨论】:

  • 如果你正在运行 webrick,你不需要在更改路由后重新启动服务器。
  • 如果你是在开发环境中运行你不需要重启服务器
【解决方案2】:

这可能是一种解决方法: 创建命名资源:

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

真的很抱歉我忘了说重点!

在你看来应该是:

link_to 'Export to CSV', toCSV_path

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

就是这样!!

它更简单而且有效。干杯! :)

【讨论】:

    【解决方案3】:

    从 routes.rb 中删除 map.resources 行,然后运行 ​​rake routes。如果你看到一个路由 /logs/:id,那是应该被删除的路由。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多