前回未ログインユーザーと・ログインユーザーのheader切り替え部分の修正をおこなっていましたが、
できたと思った切り替えがうまくいっておらず、、
とりあえずその後あれこれ試してみたのでメモ。
とその前に、前回から変更したところは、
・ニックネーム 10文字以下
・パスワード3文字以上
・メールアドレス30文字以下
上記バリデーションだけ追加しておきました。
で、切り替えの部分ですが、確かに
・ログイン→会員ページ
への遷移の場合はちゃんとheader切り替わってました。
ですが、
・新規登録→会員ページ
へ遷移した際にはheaderが未ログイン状態のviewのままになっていました。
今まで何度かログイン部分は作成しましたが、ここの部分はスムーズだったのでなぜだろう??
とりあえずhelperから情報を呼び出す記述をしていなかったので下記を追加。
app/helpers/sessions_helper.rb
module SessionsHelper def current_user @current_user ||= User.find_by(id: session[:user_id]) end def logged_in? !!current_user end def store_location session[:forwarding_url] = request.url if request.get? end end
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery with: :exception include SessionsHelper #ここを追加 private def logged_in_user unless logged_in? store_location flash[:danger] = "ログインしてください" redirect_to login_url end end end
これでどうだろう?と思いましたが、何も変わらず。
ちなみに、ヘッダの記述はパーシャルで下記の通り記述
app/view/layouts/_header.html.erb
<nav> <ul class="nav navbar-nav navbar-right"> <li><%= link_to "Jammiesホーム", root_path %></li> <li><%= link_to "使い方", '#' %></li> <li><%= link_to "お知らせ", '#' %></li> <% if logged_in? %> <li><%= link_to "マイページ", current_user %></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> アカウント <b class="caret"></b> </a> <ul class="dropdown-menu"> <li><%= link_to "アカウント情報", current_user %></li> <li><%= link_to "プロフィールの編集", '#' %></li> <li class="divider"></li> <li> <%= link_to "ログアウト", logout_path, method: "delete" %> </li> </ul> </li> <% else %> <li><%= link_to "会員登録", signup_path %></li> <li><%= link_to "ログイン", login_path %></li> <% end %> </ul> </nav>
<% if logged in? %>
の部分で、ログイン時しか呼び出せていないんだろうなーと思いつつ。
<% if current_user %>
にしてみたりしましたが、状況変わらず。
いまいち解決方法がわかりませんでした。
ということで少し切り替えて、会員ページごと替えてしまえー!ということで
ユーザーページごとレイアウトを切り替えることにしました。
ついでにヘッダの色も変えてわかりやすく。
app/views/layouts/に下記2つのファイルを作成
・users.html.erb
・_header_users.html.erb
users.html.erbに
<%= render 'layouts/header_users' %>
を追加し、_header_users.html.erbに飛ぶようにする。
続いて
UsersControllerとSessionsControllerに、
layout 'application'
を追加。
そして、UsersControllerに、
def show @user = User.find(params[:id]) render :layout => 'users' #ここを追加 end
と記述。
たったこれだけですが、
とりあえず切り替えは上手くいったようです。
◆登録前
◆登録後
ヘッダーの色は白→黒へ。
登録前に表示されていた「会員登録」「ログイン」
の表記は、「マイページ」「アカウント」へ。
またいろいろと問題発生しそうですが、とりあえず今回はこの辺で終了!
ではまた!