1
0

More than 1 year has passed since last update.

コントローラを共通化したModuleに対応するビューを自動で検索させる

Last updated at Posted at 2022-12-29

ユースケース

Railsで、複数のコントローラに似たActionがあるときに、それらを1つのModuleに切り出して、共通化することがありますよね。controllers/concerns/xxx_feature.rb のようなファイルに切り出すパターンです。

このとき、対応するビューも共通化したいことがあります。たとえば、showアクションを共通化している場合、こんな感じで自分で指定やれば、もちろんできます。

xxx_feature.rb
def show
  ...
  render "shared/xxx/show"
end

ただ、以下のような点が不満です。

  1. 面倒。
  2. あるコントローラでは共通化ビューを使いたい、あるコントローラでは直接コントローラで自前のカスタムビューを使いたいという切り分けをしようとすると、テンプレートの有無を調べたりして煩雑になる。

特に、2については耐え難いと感じて、方法を調べました。

解決方法

バッチリ、エレガントな方法がありました。

xxx_feature.rb
module XxxFeature
  extend ActiveSupport:Concern

  class_methods do
    def local_prefixes
      super.push("shared/xxx")
    end
  end
end

これで、コントローラのパス(controller_path)とコントローラの継承しているクラスの間に、このモジュールに対応するビューのパスを挟み込むことができます。

便利!!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0