rails6.0から、variantとhandlerが違う場合に異なるテンプレートが選ばれるようになった2
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
完全駆逐すると時間がかかるので、先送りにできる選択肢が見つかったので一旦は安心した。
-
category:
- ruby tags: