サブディレクトリ内のコントローラに同一ディレクトリ内のapplication.rhtmlを適用

admin/top_controller.rbにはviews/layouts/admin/application.rhtmlを自動的に適用して欲しかったので、とりあえず次のようにしてみた。

app/controller/application.rb

class ApplicationController < ActionController::Base
  class <<self
    def default_layout_with_subdirectory
      l = default_layout_without_subdirectory
      if l == 'application' and name.include? '::'
        subdir_layout = "#{File.dirname name.underscore}/application"
        if File.exist? "#{RAILS_ROOT}/app/views/layouts/#{subdir_layout}.rhtml"
          return subdir_layout
        end
      end
      l
    end
    alias_method_chain :default_layout, :subdirectory
  end

  # 以下略

(注)application.rxmlには対応してません。