maeshimaの日記

メモ書きです

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