0

ブラウザに URL を入力するとルーティング エラーが発生しますが、その URL へのリンクをクリックすると機能します。なぜこのようになっているのですか?

  devise_for :user, :skip => [:registrations, :sessions] do 
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    post 'signup/:invitation_token' => 'devise/registrations#create', :as => :user_registration 
    get 'signin' => 'devise/sessions#new', :as => :new_user_session 
    post 'signin' => 'devise/sessions#create', :as => :user_session 
    delete 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session
  end

たとえば、ブラウザに localhost:3000/signout と入力すると、エラーが発生します。でもリンクがあれば

<%= link_to "Logout", destroy_user_session_path, :method => :delete %>

それが動作します。同じことが他のカスタマイズされたルートにも当てはまります。

4

2 に答える 2

0

Web ブラウザはデフォルトで GET 要求を送信するため、手動で URL を入力するとルーティング エラーが発生します。あなたのリンクの例は、 に従って DELETE リクエストを作成してい:method => :deleteます。したがって、動詞 (GET 対 DELETE 対 PATCH 対 POST) もルートと一致する必要があります。を実行することで、アプリの具体的な説明を確認できますrake routes。リクエスト タイプ/動詞とともに URL が表示されます。

同様の DELETE リクエストを作成したい場合は、curl を使用して行うことができます: http://blogs.plexibus.com/2009/01/15/rest-esting-with-curl/

于 2013-09-03T00:20:48.240 に答える