Ответ 1
match '/users' => "users#options", via: :options
также будет возможным маршрутом, если он будет размещен перед другими маршрутами.
Я делаю службу REST в Rails. Вот мои маршруты.
resources :users
match '/users', :controller => 'users', :action => 'options', :constraints => {:method => 'OPTIONS'}
Я могу [ПОЛУЧИТЬ] моих пользователей. Я пытаюсь обновить своих пользователей, и я получаю сообщение об ошибке:
ActionController::RoutingError (No route matches [OPTIONS] "/users/1"):
Когда я запускаю rake routes
, вот маршруты, которые мне даны:
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
/users(.:format) users#options {:method=>"OPTIONS"}
Может кто-нибудь, пожалуйста, покажите мне, как исправить мои маршруты, чтобы я мог сделать любой звонок REST? Спасибо.
match '/users' => "users#options", via: :options
также будет возможным маршрутом, если он будет размещен перед другими маршрутами.
Причина, по которой я не мог направить запрос, заключалась в том, что у моего match
не было идентификатора пользователя. Я добавил строку:
match '/users/:id', :controller => 'users', :action => 'options', :constraints => {:method => 'OPTIONS'}
и теперь я могу перенаправить все мои запросы GET.
Если вы не хотите создавать два дополнительных маршрута для /users
и для /users/id
, вы можете сделать это:
match 'users(/:id)' => 'users#options', via: [:options]
В этом случае id
станет необязательным, и /users
, и /users/id
будут отвечать на один и тот же маршрут.