前提・実現したいこと
初めからメールアドレスとパスワードを設定した、いわゆる簡単ログイン機能を実装したいです。
ルーティングとコントローラー、必要なリンクを作成したのち開発環境で動作確認をした際、一度は期待していた挙動をしました。何度か動作確認をしようと思いログアウトしたのですが再度簡単ログインでログインしようとするとエラーが出るようになりました。
以下がエラーの内容となります。
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with 'id'=guest_sign_in
該当のソースコード
(routes.rb) Rails.application.routes.draw do root 'static_pages#home' get '/home', to:'static_pages#home' devise_scope :user do get 'sign_in', to: 'users/sessions#new' delete "sign_out", to: 'users/sessions#destroy' post 'users/guest_sign_in', to: 'users/sessions#new_guest' end devise_for :users, controllers: { omniauth_callbacks: 'omniauth_callbacks', sessions: 'users/sessions', registrations: 'users/registrations' } resources :users resources :microposts end
(sessions_controller.rb) class Users::SessionsController < Devise::SessionsController def new_guest user = User.guest sign_in user redirect_to root_path, notice: 'こんにちはゲストさん' end end
(user.rb) class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable, :omniauthable, omniauth_providers: [:twitter] def self.guest find_or_create_by!(email: 'guest@example.com') do | user | user.password = SecureRandom.urlsafe_base64 user.confirmed_at = Time.now end end has_many :microposts, dependent: :destroy validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 } end
(_header.html.erb) <li class="not-signedin-item mb-5"> <%= link_to users_guest_sign_in_path, class: " not-signedin-item text-decoration-none" do %> 簡単ログイン <i class="fas fa-sign-in-alt ml-2 nav-items"></i> <% end %> </li>
試したこと
こちらの記事が今のエラー解決に当たり有力そうだと思い、routes.rb
の順番を変えてみましたが変化がありませんでした。
(rails routeの結果がこちらです) root GET / static_pages#home home GET /home(.:format) static_pages#home sign_in GET /sign_in(.:format) users/sessions#new sign_out DELETE /sign_out(.:format) users/sessions#destroy users_guest_sign_in POST /users/guest_sign_in(.:format) users/sessions#new_guest new_user_session GET /users/sign_in(.:format) users/sessions#new user_session POST /users/sign_in(.:format) users/sessions#create destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy user_twitter_omniauth_authorize GET|POST /users/auth/twitter(.:format) omniauth_callbacks#passthru user_twitter_omniauth_callback GET|POST /users/auth/twitter/callback(.:format) omniauth_callbacks#twitter new_user_password GET /users/password/new(.:format) devise/passwords#new edit_user_password GET /users/password/edit(.:format) devise/passwords#edit user_password PATCH /users/password(.:format) devise/passwords#update PUT /users/password(.:format) devise/passwords#update POST /users/password(.:format) devise/passwords#create cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel new_user_registration GET /users/sign_up(.:format) users/registrations#new edit_user_registration GET /users/edit(.:format) users/registrations#edit user_registration PATCH /users(.:format) users/registrations#update PUT /users(.:format) users/registrations#update DELETE /users(.:format) users/registrations#destroy POST /users(.:format) users/registrations#create new_user_confirmation GET /users/confirmation/new(.:format) devise/confirmations#new user_confirmation GET /users/confirmation(.:format) devise/confirmations#show POST /users/confirmation(.:format) devise/confirmations#create users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy microposts GET /microposts(.:format) microposts#index POST /microposts(.:format) microposts#create new_micropost GET /microposts/new(.:format) microposts#new edit_micropost GET /microposts/:id/edit(.:format) microposts#edit micropost GET /microposts/:id(.:format) microposts#show PATCH /microposts/:id(.:format) microposts#update PUT /microposts/:id(.:format) microposts#update DELETE /microposts/:id(.:format) microposts#destroy
エラー画面にてパラメーターが{"id"=>"guest_sign_in"}と表示されていることからも
ルーティングが正しく設定できていないように思いました。
お手数おかけしますがご回答よろしくおねがいします。
補足情報(FW/ツールのバージョンなど)
・macOS Catalina 10.15.4
・rails 6.0.2.1
・ruby 2.6.3
・devise 4.7.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。