###前提・分からないこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。