rails6.0から、variantとhandlerが違う場合に異なるテンプレートが選ばれるようになった2

前編 http://blog.jiikko.com/173

mustacheの完全駆逐以外にも抜け道があることに気がついたので、それについて書いてみる。
今回やらないとといけないのは、primaryなテンプレートのハンドラーを一致させるだけでいい。つまり、修正対象は複数ハンドラーを持つテンプレートだけに絞ることができる。
対象は以下のスクリプトで絞り込める。

list = Dir.glob("app/views/**/*.{erb,slim,mustache}").group_by do |full_path|
  pathname = Pathname.new(full_path)
  basename = pathname.basename.to_s
  if(/(^\w+)\./ =~ basename && short_name = $1)
    next nil if short_name.start_with?("_")
    next File.join(pathname.dirname, short_name)
  end
end

result = list.select do |key, paths|
  next false if key.nil?
  extnames = paths.map { |path| Pathname.new(path).extname }.uniq
  if extnames.size > 1
    next true
  end
end

修正方法は、 以下のテンプレートがあった場合に、

  • index.html+mobile.mustache
  • index.html.erb

mustache の方をパーシャルに追い出しつつ、 index.html+mobile.erb を新しく作成して、内部でそのままパーシャルを呼び出すだけでいい。
render paritial: "index_mobile.html.mustache

完全駆逐すると時間がかかるので、先送りにできる選択肢が見つかったので一旦は安心した。