我正在尝试使用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请求。我只是将操作类型附加到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
?
答案 0 :(得分:2)
嗯,显而易见的答案是使用字符串而不是符号。
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
但我有一个不同的问题作为回报。在这种情况下,你会忽略REST的问题/特征/奇怪的道路/等等是什么?