ASCIIcasts - Template Inheritance
ASCIIcasts - “Episode 269 - Template Inheritance”を見て。
以前、Edge Rails.info :: Template Inheritanceを見て、3.1 から 「デフォルトのビューの位置にファイルがない場合は、親のコントローラのビューを見る」という仕様が追加されるのは知ってた。でもコントローラ間で継承ってそうそう使わないし意味あるんかなーとずっと思ってた。
RailcastsとASCIIcastsを見て疑問が氷解。全てのコントローラは ApplicationController を継承している!!!
というわけで、デフォルトで使いまわしたいビューを views/application 配下において、上書きしたい場合は各コントローラに直接書くことで、同一のビューファイルの使い回しが簡単にできるようになりました。
view_path
コントローラの継承以外でも、view_path をいじることで同じようなことが出来る。例えばASCIIcasts上では、サブドメインを見て、特定のパスに置いてあるビューファイルを先に見るような実装を紹介していた。これはどうやらRails2からできる模様。
/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery before_filter :subdomain_view_path def subdomain_view_path if request.subdomain.present? prepend_view_path "app/views/#{request.subdomain}_subdomain" end end end