17

RailsでRESTサービスを作成しています。これが私のルートです。

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

ユーザーを[GET]することができます。ユーザーを更新しようとすると、エラーが発生します。

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呼び出しを行えるようにする方法を教えてもらえますか?ありがとう。

4

4 に答える 4

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

他のルートの前に配置された場合も、可能なルートになります。

于 2014-08-26T17:18:52.530 に答える
5

/usersforと forの 2 つの追加ルートを作成したくない場合は、次のように/users/idすることができます。

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

この場合、と はidオプションとなり、両方とも/users同じ/users/idルートに対応します。

于 2015-05-07T01:12:56.450 に答える
0

JavaScript の ajax 呼び出しを使用してこの問題に遭遇した場合は、クロスサイトの問題に遭遇している可能性があります。(たとえば、ブラウザの現在の URL は :http://a.xx.comで、ajax は にリクエストを送信しますhttp://b.xx.com) の場合、Rails / other-backend-server はこの種のOPTIONSリクエストを受け取ります。

これを回避するには、rubyコードを変更するだけでなく、次の 2 つの解決策のいずれかを実行することをお勧めします。

  1. https://github.com/cyu/rack-corsを使用して CORS サポートを追加すると、コード行が機能します。

  2. すべてのリクエストを に送信し、a.xx.comNginx の設定を変更して、これらのリクエストを にリダイレクトしますb.xx.com

ところで、routes.rbOPTIONS リクエストをサポートするようにファイルを変更することはお勧めしません。これにより、コードが台無しになります。

参照: AXIOS リクエスト メソッドが 'GET' ではなく 'OPTIONS' に変更されました

于 2022-02-03T07:10:04.277 に答える