読者です 読者をやめる 読者になる 読者になる

Ruby好き非エンジニアのブログ

〜Ruby on Railsの学習記録〜

会員ページのviewの切り替えについて

前回未ログインユーザーと・ログインユーザーの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

と記述。

たったこれだけですが、
とりあえず切り替えは上手くいったようです。

◆登録前
f:id:Jyoko:20160911133211g:plain

◆登録後
f:id:Jyoko:20160911133253g:plain

ヘッダーの色は白→黒へ。
登録前に表示されていた「会員登録」「ログイン」
の表記は、「マイページ」「アカウント」へ。

またいろいろと問題発生しそうですが、とりあえず今回はこの辺で終了!

ではまた!