Help us understand the problem. What is going on with this article?

【Railsメモ】content_forを用いて、条件に応じてページ内容を切り替える

例えば以下ようなページがあったとします。
2e7fa6cde6fd23f0f0fec49cb831e78e.png

右側にはユーザ情報として、"アイコン""名前"が表示されます。
これを
・ログイン時
→自分の情報

・非ログイン時
→新規登録案内

・各ユーザのプロフィールユーザページ
そのユーザの情報

この三種類に切り替えたい場合の実装方法です。

ログイン時と非ログイン時であれば、ユーザがログインかどうかを判断して条件分岐させるだけですが、このように特定状況下で各ユーザの情報を入れたいとなると、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変数があり、かつユーザがログインしているかどうかを判定しています。

application.html.erb
<!-- 各ユーザのプロフィールユーザページ-->

<!-- そのユーザの情報 -->
<% 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 :変数, "文字列" にて"文字列":変数に代入され、条件分岐で指定したものと同じであれば、プログラムが実行されるわけです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away