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

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

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

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

787閲覧

ログインページのルート(devise)

tetsuya7724

総合スコア67

Devise

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/05/11 02:37

前提・実現したいこと

rails6にdeviseを導入しています。ルートを追記したらリンクから目的のページに行かなくなりました。
どこを変更したらいいか教えていただきたいです。

・本来のリンク
薬物サイトリンク→トップページ
ログインシンク→ログインページ
サインアップ→サインアップページ
アバウトリンク→アバウトページ

・おかしくなっているリンク
薬物サイト→ログインページ
ログインページ→ログインページ
サインアップ→サインアップページ
アバウトページ→アバウトページ

URLはあっているのに画面が違うという現象になっています。

イメージ説明

該当のソースコード

ruby

1Rails.application.routes.draw do 2 devise_for :users, :controllers => { 3 :registrations => 'users/registrations', 4 :sessions => 'users/sessions' 5 } 6 7 get "/posts/top", to: "posts#top" 8 get "/posts/about", to: "posts#about" 9 get "/posts/index", to: "posts#index" 10 get "/posts/dashboard", to: "posts#dashboard" 11 get "/posts/lessons", to: "posts#lessons" 12 get "/posts/profile", to: "posts#profile" 13 get "/posts/setting", to: "posts#setting" 14 get "/posts/answer", to: "posts#answer" 15 root 'posts#top' 16 17 18 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 19end 20

ruby

1#application controller 2class ApplicationController < ActionController::Base 3 protect_from_forgery with: :exception 4 before_action :configure_permitted_parameters, if: :devise_controller? 5 before_action :authenticate_user! 6 7 protected 8 9 def configure_permitted_parameters 10 devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 11 end 12 13 def after_sign_in_path_for(resource) 14 posts_dashboard_path # ログイン後に遷移するpathを設定 15 end 16 17 def after_sign_out_path_for(resource) 18 posts_top_path # ログアウト後に遷移するpathを設定 19 end 20end 21

ruby

1#post controller 2class PostsController < ApplicationController 3 def top 4 end 5 6 def index 7 end 8 9 def about 10 end 11 12 def dashboard 13 end 14 15 def lessons 16 end 17 18 def profile 19 end 20 21 def setting 22 end 23 24 def answer 25 end 26 27end 28

html

1 <li class="nav-item"> 2 <%= link_to "LOGOUT", destroy_user_session_path, method: :delete %> <!-- ログアウトをする --> 3 </li> 4 <li class="nav-item"> 5 <%= link_to "ABOUT", "/posts/about" %> 6 </li> 7 <li class="nav-item"> 8 <%= link_to "DASHBOARD", "/posts/dashboard" %> 9 </li> 10 <li class="nav-item"> 11 <%= link_to "LESSONS", "/posts/lessons" %> 12 </li> 13 <li class="nav-item"> 14 <%= link_to "PROFILE", "/posts/profile" %> 15 </li> 16 <li class="nav-item"> 17 <%= link_to "SETTING", edit_user_registration_path %> <!-- ログアウトをする --> 18 </li> 19 <% else %> 20 <!-- ユーザーがログインしていなかった時の処理 --> 21 <li class="nav-item"> 22 <%= link_to "LOGIN", new_user_session_path, class: 'post' %> <!-- ログイン画面に移行する --> 23 </li> 24 <li class="nav-item"> 25 <%= link_to "SIGNUP", new_user_registration_path, class: 'post' %> <!-- 新規登録画面に移行する --> 26 </li> 27 <li class="nav-item"> 28 <%= link_to "ABOUT", "/posts/about" %> 29 </li>

試したこと

もともとルートのdevise_for :users, :controllersが一番下にかかれていたので、一番上に書き直しましたがうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

deviseのコントローラーには手を加えていません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

トップページがログインページにならないということで合ってますか?

トップページのURLでログインページが表示されてしまのは恐らく、
before_action :authenticate_user!がapplication_controller.rbに記載があるからだと思います。
これはログイン済ユーザーのみにアクセスを許可するという設定なので、
ログインしていない状態では表示の許可がないため、強制的にログインページへリダイレクトされているのだと思います。

投稿2020/05/11 03:00

gnfreeworks

総合スコア306

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

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

tetsuya7724

2020/05/11 03:05

トップページにリンクするはずなのになぜかログインページに移動するという意味です。 before_action :authenticate_user!をapplication_controllerから削除して、posts_controllerに追記しました。 その後再起動しましたがまったく同じ現象が起こっています。
gnfreeworks

2020/05/11 03:11

そうですね、あとはこれ変更してみてください。 `get "/posts/index", to: "posts#index"` ↓ `get "/posts", to: "posts#index"`
gnfreeworks

2020/05/11 03:12

上記、routes.rbの中身です。
gnfreeworks

2020/05/11 03:14

基本として、 '/posts'となるのは → index、create '/posts/:id'となるのは → show、update、destroy です。 new、edit だけは少し特殊で、 '/posts/new' → new '/posts/:id/edit' → edit  となります。
tetsuya7724

2020/05/11 03:26

get "/posts", to: "posts#index"に変更しましたが直りませんでした。 今のroutes.rbとcontrollerの中身を記載します。 #routes Rails.application.routes.draw do devise_for :users, :controllers => { :registrations => 'users/registrations', :sessions => 'users/sessions' } get "/posts/top", to: "posts#top" get "/posts/about", to: "posts#about" get "/posts", to: "posts#index" get "/posts/dashboard", to: "posts#dashboard" get "/posts/lessons", to: "posts#lessons" get "/posts/profile", to: "posts#profile" get "/posts/setting", to: "posts#setting" get "/posts/answer", to: "posts#answer" root 'posts#top' # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end #posts_controller class PostsController < ApplicationController before_action :authenticate_user! def top end def index end def about end def dashboard end def lessons end def profile end def setting end def answer end end #application_controller class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) end def after_sign_in_path_for(resource) posts_dashboard_path # ログイン後に遷移するpathを設定 end def after_sign_out_path_for(resource) posts_top_path # ログアウト後に遷移するpathを設定 end end
gnfreeworks

2020/05/11 04:01

ルートを追加したらページ遷移がおかしくなったということでしたが、 一旦、`root 'posts#top'`をコメントアウトして、 ログインもした状態で、`http://localhost:3000`へ接続したらページは表示されますか?
gnfreeworks

2020/05/11 04:03

↑ すみません、 `http://localhost:3000/posts/tops` または `http://localhost:3000/posts#tops` の間違いです。
gnfreeworks

2020/05/11 07:23

ログインをした状態でもsign_inのページに行くということでしょうか?
tetsuya7724

2020/05/11 07:36

ログインした状態だとposts/topにいけます。 ログインしてないとsign_inのページにいきます。
gnfreeworks

2020/05/11 12:58

それが正常な動作なので、一応合っていると思いますよ。 やりたいことと少し違う感じですか??
tetsuya7724

2020/05/12 02:51

ログインしていない状態でもtopとaboutにアクセスできるようにしたいです
tetsuya7724

2020/05/12 03:10

ログインしてないとアクセスできないように before_action :authenticate_user!, :only => [:dashboard, :lessons, :profile, :setting, :answer] としたらできました。 ありがとうございます。
gnfreeworks

2020/05/12 03:24

良かったです^^ 引き続き頑張って下さい!
tetsuya7724

2020/05/12 05:54

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問