Rails 3.1路由 - 集合不起作用

ide*_*der 1 ruby ruby-on-rails ruby-on-rails-3

我最近升级到Rails 3.1(从3.0),由于某种原因,我的一条路线不再有效.我有一个发布csv文件的表单,由一个项目控制器处理.路线看起来像:

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

    collection do
      post 'csv_import'
      get 'transactions'
      get 'template'
    end
  end
Run Code Online (Sandbox Code Playgroud)

这就是我在日志中看到的内容 - 看起来它正在发布正确的操作.

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
Run Code Online (Sandbox Code Playgroud)

但它正在由show动作处理:

ActiveRecord::RecordNotFound in ItemsController#show

Couldn't find Item with id=csv_import
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活看到我在这里做错了什么.

Dyl*_*kow 5

您的post 'show'行干扰了这一点,因为当您发布时/items/csv_import,rails认为您的意思是items/csv_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
Run Code Online (Sandbox Code Playgroud)

第一项是匹配你的帖子/items/csv_import,它甚至从未击中第二项.

您可以将member do ... end块移动到块之后collection do ... end,它应该可以正常工作.

但是,我只是建议删除post 'show'并将该方法重命名为更好的方法,因为它无论如何都违背了标准的rails/rest约定.