右側にはユーザ情報として、**"アイコン"と"名前"**が表示されます。
これを
・ログイン時
→自分の情報
この三種類に切り替えたい場合の実装方法です。
ログイン時と非ログイン時であれば、ユーザがログインかどうかを判断して条件分岐させるだけですが、このように特定状況下で各ユーザの情報を入れたいとなると、content_forを使うのが良いようです。
例えば、このサイトの場合views内にあるusers/show.html.erb(各ユーザの名前やアイコンを表示する)では、routesで設定したURL内に含まれるIDを取得し、ユーザを特定しています。 ところが、非ログイン時はもちろん、URLにIDが設定されていないviewsからユーザを特定する事は出来ません。 その為ユーザを特定できない状況ならばヘルパーで設定したcurrent_userにて、現在ログインしているユーザの情報に切り替えて表示しようというわけなのです。各 <%= render 'users/users_deta' %>
を見てもらえればわかりますが、各条件分岐にて与える変数を変えています。 (@userがURLから取得したユーザ、current_userがヘルパーで設定した現在ログインしているユーザです)
<% if content_for?(:side_user) && logged_in? %> にて、ページにside_user変数があり、かつユーザがログインしているかどうかを判定しています。
<!-- 各ユーザのプロフィールユーザページ-->
<!-- そのユーザの情報 -->
<% if content_for?(:side_user) && logged_in? %>
<%= render 'users/users_deta', user: @user %>
<!-- ログイン時 -->
<% elsif logged_in? %>
<%= render 'users/users_deta', user: current_user %>
<!-- 非ログイン時 -->
<% else %>
<!-- 非ログイン時の新規登録案内 -->
<div class="nologin_top_image">
<div class="nologin_top_text">
<h2 class="text-white">DopeArtworksへようこそ!</h2>
<div class="button_follow">
<%= link_to '新規登録', signup_path, class: 'btn btn-lg btn-primary' %>
</div>
</div>
</div>
<% end %>
では、一番目の条件分岐を実行したい場合です。
これは実に単純で実行させたいviewsページ内に <% provide :side_user, "side_user" %>
(変数(:左)及び与える文字列("右")は各自で変えてください) を記述するだけです。
今回はcontent_forを使う経緯まで説明しましたが、重要なのは
if content_for?(:変数)
と
provide :変数, "文字列"
です。
つまり、if content_for?(:変数)
で同じ:変数
が各ページにあるかを判定し、好きなviewsにて記述したprovide :変数, "文字列"
にて"文字列"
が:変数
に代入され、条件分岐で指定したものと同じであれば、プログラムが実行されるわけです。