Как вы направляете [ОПЦИИ] в Rails? - программирование
Подтвердить что ты не робот

Как вы направляете [ОПЦИИ] в Rails?

Я делаю службу 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? Спасибо.

4b9b3361

Ответ 1

match '/users' => "users#options", via: :options

также будет возможным маршрутом, если он будет размещен перед другими маршрутами.

Ответ 2

Причина, по которой я не мог направить запрос, заключалась в том, что у моего match не было идентификатора пользователя. Я добавил строку:

match '/users/:id', :controller => 'users', :action => 'options', :constraints => {:method => 'OPTIONS'}

и теперь я могу перенаправить все мои запросы GET.

Ответ 3

Если вы не хотите создавать два дополнительных маршрута для /users и для /users/id, вы можете сделать это:

match 'users(/:id)' => 'users#options', via: [:options]

В этом случае id станет необязательным, и /users, и /users/id будут отвечать на один и тот же маршрут.