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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

Q&A

解決済

1回答

1105閲覧

deviseとrailsデフォルトのルーティングが衝突しているのを直したい

mayok

総合スコア12

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/06 12:31

編集2020/05/06 12:52

前提・実現したいこと

初めからメールアドレスとパスワードを設定した、いわゆる簡単ログイン機能を実装したいです。

ルーティングとコントローラー、必要なリンクを作成したのち開発環境で動作確認をした際、一度は期待していた挙動をしました。何度か動作確認をしようと思いログアウトしたのですが再度簡単ログインでログインしようとするとエラーが出るようになりました。

以下がエラーの内容となります。

発生している問題・エラーメッセージ

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

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

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

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

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

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

guest

回答1

0

自己解決

原因はmethod: :postを書いていないことでした。
header.html.erb内の該当リンクに含めると正常に動作しました。

また、routes.rb/devise_scope内の、sign_inとsign_outパスを削除しました。

質問内容を読んでいただきありがとうございました。

投稿2020/05/06 13:53

編集2020/05/08 06:01
mayok

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問