トップページが複数の挙動をする場合にどう書くか


#1

場合分けのあるアクションをどのように綺麗に書くか と関連してますが。

webサービスのルート/を表示するとき、

  • 未ログインなら通常のトップページ
  • ログイン済みならマイページ

のようになるwebサービスは結構あると思います。facebookやtwitterなどが該当しますね。

これをrailsでふつうに実装すると、単一のアクションにまったく別の二種類のロジックが含まれることになります。

class WelcomeController < ApplicationController
  skip_before_action :authenticate

  def index
    unless logged_in?
      # トップページ用のロジック
      return
    end
    
    # マイページ用のロジック    
    render 'mypage'
  end
end

上記は単純な例なので二種類ですが、場合によっては三種類以上の画面を出し分けたいケースもあるかもしれません。

これ、もっと綺麗にかける方法はないかと考えているのですが良い方法知っている人いませんか。