Rails 路由 - 覆盖 http 动词

Rails routes - override http verbs

我正在尝试使用resources生成以下五个路由:

      Prefix Verb URI Pattern                     Controller#Action
       lists GET  /lists(.:format)                lists#index
 create_list GET  /lists/create(.:format)         lists#create
        list GET  /lists/:id(.:format)            lists#show
destroy_list GET  /lists/:id/destroy(.:format)    lists#destroy
 update_list GET  /lists/:id/update(.:format)     lists#update

请注意,所有请求都必须是 GET 请求。我没有使用补丁、post 和删除,而是简单地将操作类型附加到 URL。我需要这个才能使用 websockets(websockets 只能做 GET 请求)。

这是我尝试过的:

resources :lists, only: [:index, :show] do
  collection do
    get :create # should route to /lists/create, but routes to /lists
  end

  member do
    get :update # should route to /lists/:id/update, but routes to /lists/:id
    get :destroy # should route to /lists/:id/destroy, but routes to /lists/:id
  end
end

结果如下:

Prefix Verb URI Pattern          Controller#Action
lists  GET  /lists(.:format)     lists#create
 list  GET  /lists/:id(.:format) lists#update
       GET  /lists/:id(.:format) lists#destroy
       GET  /lists(.:format)     lists#index
       GET  /lists/:id(.:format) lists#show

这里的问题是它似乎拒绝关键字:create:update:destroy,可能是因为它知道我在尝试做一些非常规的事情。

我知道我可以用不同的路由写五次 get,但我想使用 resources 以便我可以嵌套路由等

如何使用resource从这个问题的顶部得到五个路线?

嗯,显而易见的答案是使用字符串而不是符号。

resources :lists, only: [:index, :show] do
  collection do
    get 'create', as: 'create'
  end

  member do
    get 'update', as: 'update' 
    get 'destroy', as: 'destroy' 
  end
end

但我在 return 中有一个不同的问题。在这种情况下,是什么 problem/feature/weird road/etc 让您忽略了 REST?