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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

1257閲覧

【Rails】devise使用:ユーザ情報詳細画面作成後、ログイン画面への遷移時にエラーして遷移できない

otdsh9432

総合スコア55

Devise

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/21 14:22

現在、自作アプリを作成中にエラーが出てしまい、解決方法を調査中・試行中ですがなかなか解決しないため、解決方法、もしくは原因だけでもご教示いただけないかと思い、質問させていただきます。

Ruby on Railsにてdevise導入の上、カスタマイズとして、ユーザ情報の詳細画面を作成しました。(show.html.erb)

■事象:
ユーザ情報詳細画面自体は正常に表示することができましたが、
deviseで作成されたログイン画面へのリンクをクリックすると、下記のエラーが出てしまいました。

エラー画面

<ログイン画面へのリンク>(views/shared/_header.html.erb)
下記の「ログイン」のリンク(new_user_session_path)をクリックしました。

ruby

1<header class="app-title navbar navbar-expand-md navbar-light text-white"> 2<nav> 3 <div class="loginstauts"> 4 <% if user_signed_in? %> 5 <strong><%= current_user.username %></strong>でログインしています。 6 <%= link_to 'プロフィール変更', edit_user_registration_path %> | 7 <%= link_to "ログアウト", destroy_user_session_path %> 8 <% else %> 9 <%= link_to "ユーザ登録", new_user_registration_path %> | 10 <%= link_to "ログイン", new_user_session_path %> 11 <% end %> 12 | <%= link_to "投稿一覧", posts_path %> 13 </div> 14</nav> 15</header>

<コントローラ>(controllers/users_controller.rb)

ruby

1class UsersController < ApplicationController 2 skip_before_action :authenticate_user! 3 def show 4 @user = User.find_by(params[:id]) 5 end 6end

(controllers/users/sessions_controller.rb)

ruby

1class Users::SessionsController < Devise::SessionsController 2 before_action :configure_sign_in_params, only: [:create] 3 skip_before_action :authenticate_user! 4 5 protected 6 7 def configure_sign_in_params 8 devise_parameter_sanitizer.permit(:sign_in, keys: [:user_id]) 9 end 10end 11

<ルーティング>

ruby

1Rails.application.routes.draw do 2 root 'home#index' 3 resources :posts 4 resources :users, only: [:show] 5 6 devise_for :users, :controllers => { 7 :registrations => 'users/registrations', 8 :sessions => 'users/sessions' 9 } 10end

rails routesでUser関連のルーティングを確認した結果は以下です。
ルーティング

■わかっていること:
エラーの原因としては、上記ルーティングに「GET /users/:id」があるので、
「/users/sign_in」というパスに遷移しようとすると、"sign_in"の部分が[:id]だと認識され、id="sign_in"のユーザを探してしまっていることまでは理解できました。

しかし、以下のQiita記事などでは、上記の問題は起きていないので、
ユーザ詳細画面の作成にあたり、何か追加の考慮がいるというのは想定外でした。
Railsのdeviseでマイページの作成
devise導入からユーザーのプロフィール画面を作成するまで

試行錯誤中ではありますが、
あまり我流で色々試すとdeviseの良さを消してしまうのではないかと懸念し、
並行して皆様の知見をご参考にしたい次第です。
お手数をおかけしますが、追記すべき事項があればご教示いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

User.find(params[:id]) とするとうまく動くかもです。

参考:https://qiita.com/takannporo/items/be1ad7c2081426fd76c0

また resources :users, only: [:show]
devise_forより下に置いてあげて下さい。

参考:https://qiita.com/yusaku_/items/d49c7f19feda6dba127a

投稿2020/04/21 14:39

編集2020/04/22 04:34
hatsu

総合スコア1809

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

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

otdsh9432

2020/04/21 23:35

ご回答いただきありがとうございます! 教えていただいた方法を試したのですが、下記の箇所でエラーが出て上手く動きませんでした。。 @user = User.find(params[:id]) ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with 'id'=sign_in
otdsh9432

2020/04/22 04:00

ありがとうございます! 上記試したところ、エラーなく上手く遷移することができました。 ルーティングに優先順があることや、routes.rbの書き方によって優先順位が変わることを知らなかったので、大変勉強になりました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問