Namespace
Methods
#
I
L
Included Modules
Instance Public methods
_implied_layout_name()

If no layout is supplied, look for a template named the return value of this method.

Returns

  • String - A template name

# File actionpack/lib/abstract_controller/layouts.rb, line 236
def _implied_layout_name
  controller_path
end
_write_layout_method()

Creates a _layout method to be called by _default_layout .

If a layout is not explicitly mentioned then look for a layout with the controller’s name. if nothing is found then try same procedure to find super class’s layout.

# File actionpack/lib/abstract_controller/layouts.rb, line 244
      def _write_layout_method
        remove_possible_method(:_layout)

        case defined?(@_layout) ? @_layout : nil
        when String
          self.class_eval %Q{def _layout; #{@_layout.inspect} end}, __FILE__, __LINE__
        when Symbol
          self.class_eval "            def _layout
              #{@_layout}.tap do |layout|
                unless layout.is_a?(String) || !layout
                  raise ArgumentError, "Your layout method :#{@_layout} returned \#{layout}. It " \
                    "should have returned a String, false, or nil"
                end
              end
            end
", __FILE__, __LINE__ + 1
        when Proc
          define_method :_layout_from_proc, &@_layout
          self.class_eval %Q{def _layout; _layout_from_proc(self) end}, __FILE__, __LINE__
        when false
          self.class_eval %Q{def _layout; end}, __FILE__, __LINE__
        when true
          raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
        when nil
          if name
            _prefixes = _implied_layout_name =~ /\blayouts/ ? [] : ["layouts"]

            self.class_eval "              def _layout
                if template_exists?("#{_implied_layout_name}", #{_prefixes.inspect})
                  "#{_implied_layout_name}"
                else
                  super
                end
              end
", __FILE__, __LINE__ + 1
          end
        end
        self.class_eval { private :_layout }
      end
inherited(klass)
# File actionpack/lib/abstract_controller/layouts.rb, line 177
def inherited(klass)
  super
  klass._write_layout_method
end
layout(layout, conditions = {})

Specify the layout to use for this class.

If the specified layout is a:

String

the String is the template name

Symbol

call the method specified by the symbol, which will return

the template name
false

There is no layout

true

raise an ArgumentError

Parameters

  • layout - The layout to use.

Options (conditions)

  • :only - A list of actions to apply this layout to.

  • :except - Apply this layout to all actions but this one.

# File actionpack/lib/abstract_controller/layouts.rb, line 221
def layout(layout, conditions = {})
  include LayoutConditions unless conditions.empty?

  conditions.each {|k, v| conditions[k] = Array(v).map {|a| a.to_s} }
  self._layout_conditions = conditions

  @_layout = layout || false # Converts nil to false
  _write_layout_method
end