Ruby on rails Rails 3.1路由--集合不工作

Ruby on rails Rails 3.1路由--集合不工作,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我最近从3.0升级到了Rails 3.1,出于某种原因,我的一条路线不再有效。我有一个表单,它发布一个csv文件,并由项目控制器处理。路线如下所示: resources :items do member do post 'receive' post 'show' end collection do post 'csv_import' get 'transactions' get 'template'

我最近从3.0升级到了Rails 3.1,出于某种原因,我的一条路线不再有效。我有一个表单,它发布一个csv文件,并由项目控制器处理。路线如下所示:

  resources :items do 
    member do
      post 'receive'
      post 'show'
    end

    collection do
      post 'csv_import'
      get 'transactions'
      get 'template'
    end
  end
这是我在日志中看到的,看起来它发布了正确的操作

Started POST "/items/csv_import" for 127.0.0.1 at Tue May 08 11:09:52 -0400 2012
  Processing by ItemsController#show as HTML
但它正在由show action处理:

ActiveRecord::RecordNotFound in ItemsController#show

Couldn't find Item with id=csv_import
我一辈子都看不出我做错了什么。

你的帖子“show”行干扰了这一点,因为当你发布到/items/csv\u import时,rails认为你指的是items/csv\u import/show,而csv\u import是你想要导入的项目的id。如果运行rake routes,您将看到如下部分:

            item POST   /items/:id(.:format)        items#show
csv_import_items POST   /items/csv_import(.:format) items#csv_import
第一个项目与您的帖子匹配到/items/csv\u导入,它甚至从未命中第二个项目

你可以移动成员做。。。要在您的收藏之后结束块。。。端块,它应该可以正常工作

但是,我建议您不要使用post'show'并将该方法重命名为更好的方法,因为它违反了rails/rest的标准惯例。

您的post'show'行会干扰这一点,因为当您发布到/items/csv\u import时,rails认为您指的是items/csv\u import/show,csv_import是要导入的项目的id。如果运行rake routes,您将看到如下部分:

            item POST   /items/:id(.:format)        items#show
csv_import_items POST   /items/csv_import(.:format) items#csv_import
第一个项目与您的帖子匹配到/items/csv\u导入,它甚至从未命中第二个项目

你可以移动成员做。。。要在您的收藏之后结束块。。。端块,它应该可以正常工作


然而,我只建议去掉post'show'并将该方法重命名为更好的方法,因为它违背了标准的rails/rest约定。

rake路由有什么要说的?rake路由有什么要说的?好眼力!项目中的另一个开发人员在中添加了这一点,而我正看着它,却没有看到它。谢谢工作得很有魅力。好眼力!项目中的另一个开发人员在中添加了这一点,而我正看着它,却没有看到它。谢谢工作得很有魅力。