2016-03-21 2 views
0

私は認証のためにDeviseを追加しましたが、私のユーザーをURLからログアウトできるようにしたいので、:getの代わりに:deleteを使用するようにDeviseの設定を変更しました。私はrake routesを見てみると、正しいように表示されます。Railsのルートが同期していないようです

/sites/veggies/vegj $ rake routes 
        Prefix Verb URI Pattern      Controller#Action 
     new_user_session GET /users/sign_in(.:format)   devise/sessions#new 
      user_session POST /users/sign_in(.:format)   devise/sessions#create 
    destroy_user_session GET /users/sign_out(.:format)   devise/sessions#destroy 

しかし、私は私のアプリでログアウトしようとしたとき、私は/users/sign_outDELETEにマッピングされていると言うルーティングエラーが発生します。

enter image description here

私はちょうどので、多分、これは非常に基本的な問題であるレールを使い始めますよ。私は何かをリロードする必要があるように感じますが、私はレール/レーキがこのような更新を即座に処理すると思っていましたか?

+1

更新が再起動 –

+0

ずに拾われていない要求をGET取る要求

<%= link_to "Sign Out", destroy_user_session_path, method: :delete %> 

をDELETEかかります

は 'ルートはに位置している@FrederickCheung config/routes.rb' ..イニシャライザにはありません! – siegy22

+0

しかし、deviseに使用するように設定するには:get for signoutsはconfig/initializers/devise.rbにあります。 –

答えて

2

initializers/devise.rbに変更した後、サーバーを再起動する必要があります。彼らは自動的に拾われません。

PS:あなたが開始した後に自動的にピックアップされていないものの多くは存在しない

、これらは、それらのほとんど

  • 新しい宝石(インストールバンドルん後)
  • あるファイルを生成サーバー(例えば、新しい宝石をインストールしたサーバーを開始し、宝石ジェネレータを実行した)
  • initializers/*.rbファイル
  • config/application.rb, config/environment.rb

追加することを忘れた余分なファイルがあるかもしれませんが、95%の場合は上記のファイルのみを変更します。あなたは、デフォルトでとしてそれを言及する必要がリンクを定義しながら、それはあなたがそれがdelete requestであることを指してmethod: :deleteを使用してget requestがかかりますので

+0

さて、レールで拾われたもの(そしてそうでないもの)を知る必要があると思います。あなたは良い参考資料を知っていますか? – doub1ejack

+0

@ doub1ejack私の答えを更新しました。 – Avdept

+0

ありがとう@Avdept、本当に役立ちます。 – doub1ejack

1

エラーが示すように、取得要求を出しています。 deleteメソッドを使用するリンクを指定する必要があります。

<%= link_to "Log Out", destroy_user_session_path, method: :delete %>

あなたgemfileでJQuery-ujsを持っていることを確認してください。

+0

'rake routes'の出力によれば、私は' DELETE'メソッドを使う必要はありません。 "' destroy_user_session GET/users/sign_out(。:format) '" – doub1ejack

+0

これはあなたのスクリーンショットが示すものではありません。私はそれがdeviseのデフォルトだと思って編集しましたが、サイトを再起動しませんでしたか? –

+0

ええ、私の質問は、私が2つの異なるルート(「レーキルート」とスクリーンショット)を取得していた理由です。どうやら再起動が必要なことをよく理解していないからです。あなたがレールが何をしているのか、自動検出していないのか分かっていれば、私はすべて耳にします:) – doub1ejack

0

destroy_user_session_pathまたは「/ユーザ/ sign_outは」ないget要求を削除する必要があります。それはそれは設定/初期化子で物事に

<%= link_to "Sign Out", destroy_user_session_path %> 
関連する問題