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

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

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

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

Ruby

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

ログイン

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

Q&A

解決済

1回答

1232閲覧

gem devise (トップページ(ログインフォーム入力))→ 一覧画面

hana_123

総合スコア3

Devise

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

Ruby

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

ログイン

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

0グッド

0クリップ

投稿2020/11/11 06:59

編集2020/11/13 02:59

前提・実現したいこと

rails を使ってのSNS作成中です。
そこでhome/index.html.erbがログイン・新規登録ページの画面へ飛ぶことのできる最初のページとなるよう作成しました。ログインが完了すると投稿一覧ページへ遷移する仕組みとなっています。

ここでhome/index.html.erbから直接ログインフォームを追記し一覧機能へ遷移できる仕組みにしたいと思っています。
現在home/index.html.erbにログイン用のフォームは置いてある状態です。
しかし、submitボタンを押すとsession/new.html.erbのページへ遷移してしまいます。

home/index.html.erbのフォームにログイン情報を記入した場合でも一覧画面へ遷移するような仕組みなしたいと思っています。

該当のソースコード

home/index.html.erb

1 2 3 <div class="get-user"> 4 <div class="user-top"> 5 6 7 <%= link_to 'SIGN IN', new_user_session_path, class: "login" %> 8 <%= form_with model: @user, url: user_session_path, class: 'registration-main', local: true do |f| %> 9 <div class="login-field"> 10 <div class="name-form"> 11 <div class="form-group"> 12 <%= f.label "メールアドレス" %><br /> 13 <%= f.email_field :email, autofocus: true, autocomplete: "email" %> 14 </div> 15 </div> 16 17 <div class="form-group"> 18 <%= f.label "パスワード" %><br /> 19 <%= f.password_field :password, autocomplete: "current-password" %> 20 </div> 21 22 <div class="form-group"> 23 24 25 <div class="actions"> 26 <%= f.submit "Log in", class:"submit-btn" %> 27 </div> 28 </div> 29 <% end %> 30 </div> 31 32 <div class="join-us"> 33 <p class="sign-up-info"> 34 Don't have an account? 35 </p> 36 <%= link_to 'SIGN UP', new_user_registration_path, class: "sign-up" %> 37 </div> 38 39 </div> 40 </div>

試したこと

homesのコントローラindexアクションにdevise sessionのnewとcreateの情報が必要なのかな・・・と考えましたが、ルーティングとコントローラの設定の仕方がわかりません・・・

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

mysql2 '>= 0.5.3'
ruby '2.6.5'
'rails', '~> 6.0.0'

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

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

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

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

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

guest

回答1

0

ベストアンサー

session_controllerに

def after_sign_in_path_for(_resource)
一覧ページのpath
end

path名はindexページのpathを設定して見てください。

投稿2020/11/13 06:29

test_user_222

総合スコア20

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

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

hana_123

2020/11/16 10:28

返信遅くなってしまい大変申し訳ありません! 設定してみたところ解決いたしました! ありがとうございました!!!!
hana_123

2020/11/16 10:48

すみません。こちらのやり方でできたかと思ったんですが、変更後1回目は求めていた挙動(トップページログインフォームから一覧ページへ遷移)できたのですが、 ログアウト→もう一度トップページログインフォームからのログインを試みたところ、session.newのビューへ遷移されてしまいます・・・。
test_user_222

2020/11/16 11:10 編集

ログインとログアウトのルーティングどうなってます? あとログアウトのpath名ももう一度確認してみてください。
hana_123

2020/11/16 12:24

``` Rails.application.routes.draw do devise_for :users , controllers: { registrations: 'users/registrations', sessions: 'users/sessions' } root to: 'homes#index' resources :homes, only: :index resources :users, only: :show do resources :memos, only:[:index, :create] end resources :posts do resources :comments, only: :create post 'add' => 'likes#create' delete '/add' => 'likes#destroy' end end ``` こちらがルーティングのパスとなっています! ログアウトに関しましては、deviseの既存の状態から変更していません。 あと、application_controllerへはこのように記述しております。 ``` class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :country_id, :birthday, :profile, :avatar]) devise_parameter_sanitizer.permit(:account_update, keys: [:name, :profile, :avatar]) end def after_sign_in_path_for(resource) posts_path(resource) end end ```
test_user_222

2020/11/16 12:36

session_controllerに def after_sign_in_path_for(_resource) posts_path(resource) end def after_sign_out_path_for(_resource) root_path end してみてください。
test_user_222

2020/11/16 12:42

<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>formのところもこれに変えてみてください
hana_123

2020/11/16 13:07

<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>formのところもこれに変えてみてください >>これは、どういった意味でしょうか・・・?? こちらに記入し直すと言うことでしょうか? こちらにしてしまうと新規登録画面へ遷移するようになってしまいます。 理解力が足らず申し訳ありません・・・。
test_user_222

2020/11/16 13:18

すいません勘違いでした。 <%= form_with model: @user, url: user_session_path, class: 'registration-main', local: true do |f| %> これを <%= form_with model: @user, url: session_path, local: true do |f| %>に変えてみてください。 おそらくurl: session_pathが正しくないかもしれないですね。
hana_123

2020/11/16 13:22

session_pathに変えてしまうと ArgumentError in Homes#index wrong number of arguments (given 0, expected 1+) とArgument Errorとなってしまいます・・・
test_user_222

2020/11/16 13:28 編集

form_with (model: @user, url: session_path(resource_name), local: true) do |f|にしてみてください
hana_123

2020/11/16 13:29

NameError in Homes#index undefined local variable or method `resource_name' for #<#<Class:0x00007faf95de8108>:0x00007faf9cde6a40> Did you mean? resolve_asset というエラーに変わりました・・・。
test_user_222

2020/11/16 13:34 編集

sessions/newでログインページつくってないんでしたね。 そもそも論なんですが、なぜログインページをsessions/newじゃなくてhomes/indexにしたいんですか?
hana_123

2020/11/16 13:35

はい! home/indexにdeviseのsessionとregistrationをくっつけているような形になっています!
test_user_222

2020/11/16 13:38

見る限りsessions/newとhomes/indexでやってること一緒なのでせっかくdeviceつかってるのなら、最初にrootでsessions/newに飛ばすのはだめなんですか?それともどうしてもhomes/indexにしないといけないんですか?
hana_123

2020/11/16 13:41

home/indexからログインページと新規登録ページへ遷移しそこからログインして一覧画面へ遷移させるような仕組みにしたかったのでこのような仕様にしたのですが、後からhome/indexから直接ログインできたら楽ではないかと思い現状追加しているという感じです。 このままの状況では、求めている実装は不可能でしょうか・・・??
test_user_222

2020/11/16 13:41

今行われてることを説明すると、homes/indexでフォームを作っているのでログインのpathがsession_path,になっていますので、 homes/indexでログインボタンをおすとルート先のsessions/newへ飛んでいます。
hana_123

2020/11/16 13:46

なんだかそう聞くとdeviseを使っている意味がなくなってしまいそうですね・・・。 おっしゃる通り、home/indexを消して、rootにsession.newを指定してあげた方が簡潔的でわかりやすい仕様になりそうです・・・。 そちらで疾走してみたいと思います! たくさんの質問に回答していただきありがとうございました・・・。
test_user_222

2020/11/16 13:47

>home/indexからログインページと新規登録ページへ遷移しそこからログインして一覧画面へ遷移させるような仕組みにしたかったのでこのような仕様にしたのですが、後からhome/indexから直接ログインできたら楽ではないかと思い現状追加しているという感じです。 そうであれば、sessions/new.html.erbをhomes/indexとして扱えば可能です。 homes/indexを消して 今rootをhomes/indexに設定しているのをsessions/newに変えて、 homes/indexの内容を丸々sessions/newにもっていけば解決ではないでしょうか?
hana_123

2020/11/16 13:55

本当にありがとうございます! こちらで実装させていただき無事ログインで切るようになりました!!!! 本当に助かりました! 今後ともよろしくお願いいたしますm(_ _)m!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問