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)
我不能为我的生活看到我在这里做错了什么.
您的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约定.
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |