8

RESTFUL認証をインストールしましたが、すべて正常に機能しているようです。サインアップしてログインできます。ログアウトできる唯一の方法は、URL http:// localhost:3000/logoutを入力することです。

ページにログアウトボタンを追加するにはどうすればよいですか?私はmembers.rhtmlに1つ追加してみました

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

これはsession_controller.rbを参照しますが、「showに応答したアクションはありません。アクション:create、destroy、およびnew」というエラーが発生します。

何かご意見は?ありがとう

4

2 に答える 2

8

ルートファイルには何がありますか?

入れてみてください

map.log_out 'logout', :controller => 'sessions', :action => 'destroy'

あなたのルートで。

次に、

<%= link_to "Sign out", log_out_url %>

サインアウトリンク用。

編集

そのすべては、ルーティングを指定する方法にかかっています。

ルーティングにmap.log_outが含まれているため、URL http:// localhost:3000 / logout urlがこれによって取得され、正しいアクションにルーティングされます。

あなたが持っている場合 :

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

これにより、 http:// localhost:3000/sessionのリンクが生成されます。ただし、ルーティングには何もしません。それでも正しいルートを指定する必要があります。

Railsは破棄アクションをURLに追加しないことに注意してください。( http:// localhost:3000 / session / destroyは作成されません。) destroyのアクションがある場合は、DELETEhttp動詞を使用して送信することを前提としています。何らかの理由で、完全ではなく、実際にはデフォルトでDELETE動詞を送信することもありません。

これを強制することができます:

<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>

正しくルーティングしない限り、これは機能しません。以下をルートに入れると:

map.resource :session

次に、railsはすべての動詞のルーティングを生成し、DELETEを含むそれらのデフォルトのアクションを指定します。詳細については、こちらをご覧ください:外部からのRailsルーティング

そのページ全体は、あなたが本当にそれを理解するまで何度も読む価値があります。Railsを理解するにはルーティングが重要です。

Sessionsのような単純なコントローラーの場合、log_outルートを指定してから、log_out_urlにリンクする方が簡単です。

(理にかなっていることを願って、睡眠不足が忍び寄っています!)

于 2010-01-30T03:17:30.683 に答える
1

deviseを使用していて、関係するモデルがUserである場合、エレガントな方法は次のとおりです。

<%= link_to 'logout', destroy_user_session_path, method: :delete %>

それが機能する理由:

  • HTTPメソッドが原因でGET、POST、PUT、PATCH、およびDELETEであるため、method: :delete(ではなくmethod: :destroy)を使用します。
  • いつものようにdeviseUserモデルで使用destroy_user_session_pathしています。Managerなどの他のモデル名を定義する場合は、ログアウトパスを次のように変更するだけです。destroy_manager_session_path
于 2018-02-15T11:07:07.503 に答える