質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

4589閲覧

Deviseのログアウト機能について(rails)

yamady

総合スコア176

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/05/22 11:18

###前提・分からないこと

Ruby on RailsにDeviseを導入してみました。
ユーザー登録をする際に、エラーが発生してしまいます。

エラーメッセージ

Ruby

1NameError in StaticPages#home 2undefined local variable or method `user_sign_out_path' for #<#<Class:0x007fb19ef6d8b0>:0x007fb19ef5ca88> 3 4 <li class="divider"></li> 5 <li> 6 <%= link_to "ログアウト", user_sign_out_path, method: :delete %> 7 </li> 8 </ul> 9 </li>

おそらくuser_sign_out_pathが定義されていないということなのだと思い、チュートリアルをなぞり下記のようなコードを書いてみたのですが、エラーが解消せず。。

users/sessions_controller.rb

Ruby

1 def destroy 2 session.delete(:user_id) 3 @current_user = nil 4 redirect_to root_url 5 end

###該当するソースコード

user.rb(モデル)

Ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :trackable, :validatable, :omniauthable, 6 omniauth_providers: [:facebook] 7 mount_uploader :image, ImageUploader 8 9 def self.find_for_oauth(auth) 10 user = User.where(uid: auth_uid, provider: auth.provider).first 11 12 unless user 13 user = User.create( 14 uid: auth.uid, 15 provider: auth.provider, 16 email: User.dummy_email(auth), 17 password: Devise.friendly_token[0, 20] 18 ) 19 end 20 21 user 22 end 23 24 private 25 26 def user_params 27 params.require(:user).permit(:name, :email, :password, :password_confirmation, :image, :background) 28 end 29 30 def self.dummy_email(auth) 31 "#{auth.uid}-#{auth.provider}@example.com" 32 end 33end

routes.rb(ルーティング)

Ruby

1Rails.application.routes.draw do 2 3 get 'users/show' 4 5 devise_for :users, controllers: { registrations: 'users/registrations', omniauth_callbacks: 'users/omniauth_callbacks' } 6 devise_scope :user do 7 get '/users/sign_out' => 'devise/sessions#destroy' 8 end 9 devise_for :admin_users, ActiveAdmin::Devise.config 10 ActiveAdmin.routes(self) 11end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

deviseの機能をよく理解しておらず。。。
routesをしっかり定義したらできました!

routes.rb

Ruby

1 devise_for :users, controllers: { registrations: 'users/registrations', 2 omniauth_callbacks: 'users/omniauth_callbacks', 3 sessions: 'users/sessions', confirmations: 'users/confirmations' 4 }

反省、反省です。

投稿2017/05/22 13:35

yamady

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問