1

我最近升级到 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

这就是我在日志中看到的——看起来它正在发布正确的操作。

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 动作处理:

ActiveRecord::RecordNotFound in ItemsController#show

Couldn't find Item with id=csv_import

我一辈子都看不到我在这里做错了什么。

4

1 回答 1

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

第一项与您的帖子相匹配/items/csv_import,它甚至从未命中第二项。

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

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

于 2012-05-08T15:51:26.683 回答