質問

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

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

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

session_controller.rbを参照していますが、エラーが発生します。行動:創造し、破壊し、そして新しくする」

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

役に立ちましたか?

解決

あなたはルートファイルでなければならないのか?

タグを入れてみてください
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
あなたのルートの中に

それからちょうど

持っています
<%= link_to "Sign out", log_out_url %>
リンクアウト記号のための

編集

そのあなたがルーティングを指定する方法にすべてダウンします。

あなたは、ルーティングにmap.log_outを持っていたので、その後、URL ます。http:// localhostを:3000 /ログアウト URLは、このでピックアップし、正しい行動にルーティングされます。

あなたがお持ちの場合:

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
// localhostを:3000 /セッションの

これはちょうど HTTPのあなたのためのリンクを生成します。しかし、それはルーティングに何もしません。あなたはまだ、正しいルートを指定する必要があります。

RailsはURLに破壊するアクションを追加しないことに注意してください。 は(それが作成されることはありませんます。http:// localhostを:3000 /セッション/ を破壊します)それはあなたがする作用を持っている場合は、DELETEのHTTP動詞とそれを送信されることを破壊することを想定しています。何らかの理由で、そのはかなり完璧ではない、それはDELETE動詞を送るにデフォルト設定も、実際にdoesntの。

これを行うには、それを強制することができます

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

これは、まだ正確にもルートそれをあなたしない限り動作しません。あなたが入れた場合のルートに次のように:

map.resource :session
その後、レールは、すべての動詞のルーティングを生成し、DELETEを含め、それらのデフォルトのアクションを指定します。 の外部から Railsのルーティング:詳しい情報はここで見つけることができますます。

あなたが本当にそれを理解するまで、

はそのページ全体を読み何度も価値があります。ルーティングが理解Railsのための鍵です!

セッションのような単純なコントローラの場合、それだけでlog_out_url ..

にlog_outルートと、リンクを指定することが容易です (理にかなっている希望、睡眠不足がに忍び寄るさ!)

他のヒント

使用している場合 工夫する そしてあなたの懸念しているモデルは ユーザー, 、エレガントな方法は次のとおりです。

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

これは次の理由で機能します。

  • HTTP メソッドは GET、POST、PUT、PATCH、DELETE であるため、 method: :delete (ない method: :destroy)
  • 私たちが使っている destroy_user_session_path工夫する そして ユーザー 他のモデル名を定義した場合は、通常どおりモデルを作成します。 マネージャー ログアウトパスを変更するだけです destroy_manager_session_path
scroll top