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?
我正在尝试使用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?