Methods
Included Modules
- AbstractController::Layouts::ClassMethods::LayoutConditions START:includes
Classes and Modules
Instance Public methods
If no layout is supplied, look for a template named the return value of this method.
Returns
-
String - A template name
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 %{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 %{def _layout; _layout_from_proc(self) end}, __FILE__, __LINE__ when false self.class_eval %{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
Specify the layout to use for this class.
If the specified layout is a:
the String is the template name | |
call the method specified by the symbol, which will return |
the template name
false |
There is no layout |
true |
raise an ArgumentError |
Parameters
-
String, Symbol, false - 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