環境
・Ruby 2.7.3
・rails 6.1.3
・docker
現状把握
⇨下記のよう、新規登録はのURLは出るかつ登録後も正常に指定した遷移先へ行く。
⇨コントローラで指定しているとおり。
⇨http://localhost:5000/users/sign_up
##ログアウト
⇨ログアウトを押してもログアウトの遷移先へ行かない。かつログイン者はログアウト出来ているかわからない。button_toでも正常に動かない。なぜか?
⇨ログアウトの遷移先はログインページへ指定している。(new_user_session_path)
⇨試しに。元の状態へ。(super)
⇨これでログアウトすると、rootで指定しているところへ。かつ以下のエラー。
http://localhost:5000/
NoMethodError in Posts#index
undefined method `id' for nil:NilClass
⇨ならばrootを指定していなかったら、どこへ?
⇨何も変わらずに、遷移しない。ログアウトしているかわからない。
⇨また、コントローラで指定はしている。(new_user_session_path)
ログアウトの遷移先を調べる。
以下の記事で解決。
https://qiita.com/Tatty/items/a9759755e562ac4693ec
実装はこのように。ログアウト後の遷移先はログインページに指定している。
#def destroy
#new_user_session_path
#end
#上記で設定してもうまくいかなかった。
def after_sign_out_path_for(resource)
new_user_session_path
end
⇨遷移は出来ているが、遷移先で以下のようなエラー。
http://localhost:5000/users/sign_in
ArgumentError in Users::Sessions#new
Showing /app/app/views/devise/sessions/new.html.erb where line #20 raised:
First argument in form cannot contain nil or be empty
Extracted source (around line #20):
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="form-group has-icon">
<label class="control-label sr-only" for="inputEmail"><%= f.label :email %></label>
<%# <input type="text" class="form-control" id="inputEmail" placeholder="メールアドレス"> %>
解決
新しいformの書き方で解決しました。
記事を参照⇨https://qiita.com/wonder_meet/items/fac07af1edcd79ad102a
<%#= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
⬇︎
<%= form_with model: @user, url: user_session_path, local: true do |f| %>
以前のよりもシンプルになりわかりやすい。
ログイン出来るか試した。
⇨結果止まった。遷移先のURLにも変わらず、止まった。
⇨以下の形で指定してみる。
⇨遷移出来た!!!
app/controller/users/sessions_controller.rb
# GET /resource/sign_in
# def new
# posts_path
# end
# POST /resource/sign_in
# def create
# posts_path
# end
#上記で設定してもうまくいかなかった。
#ログイン後のリダイレクト先
def after_sign_in_path_for(resource)
posts_path
end
コードに書いているとおり(#上記で設定してもうまくいかなかった。)
あの部分に指定しても動きませんでした。
何か役に立てばと思います。
ありがとうございました。