Module: ActiveScaffold::RenderingHelper

Defined in:
lib/active_scaffold/extensions/action_view_rendering.rb

Overview

:nodoc:

Instance Method Summary collapse

Instance Method Details

#render(*args, &block) ⇒ Object

Adds two rendering options.

render :super

This syntax skips all template overrides and goes directly to the provided ActiveScaffold templates. Useful if you want to wrap an existing template. Just call super!

render :active_scaffold => #ActiveScaffold::RenderingHelper.controllercontroller.to_s, options = {}+

Lets you embed an ActiveScaffold by referencing the controller where it’s configured.

You may specify options for the embedded scaffold. These constraints have three effects:

* the scaffold's only displays records matching the constraint
* all new records created will be assigned the constrained values
* constrained columns will be hidden (they're pretty boring at this point)

You may also specify options for the embedded scaffold. These only do 1/3 of what constraints do (they only limit search results). Any format accepted by ActiveRecord::Base.find is valid.

Defining options lets you completely customize the list title for the embedded scaffold.

options force to load embedded scaffold with AJAX even when render_component gem is installed.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/active_scaffold/extensions/action_view_rendering.rb', line 38

def render(*args, &block)
  if args.first.is_a?(Hash) && args.first[:active_scaffold]
    render_embedded args.first
  elsif args.first == :super
    @_view_paths ||= lookup_context.view_paths.clone
    @_last_template ||= lookup_context.last_template
    parts = @virtual_path.split('/')
    template = parts.pop
    prefix = parts.join('/')

    options = args[1] || {}
    options[:locals] ||= {}
    if view_stack.last
      options[:locals] = view_stack.last[:locals].merge!(options[:locals]) if view_stack.last[:locals]
      options[:object] ||= view_stack.last[:object] if view_stack.last[:object]
    end
    options[:template] = template
    # if prefix is active_scaffold_overrides we must try to render with this prefix in following paths
    if prefix != 'active_scaffold_overrides'
      options[:prefixes] = lookup_context.prefixes.drop((lookup_context.prefixes.find_index(prefix) || -1) + 1)
    else
      options[:prefixes] = ['active_scaffold_overrides']
      last_view_path = File.expand_path(File.dirname(File.dirname(lookup_context.last_template.inspect)), Rails.root)
      lookup_context.view_paths = view_paths.drop(view_paths.find_index { |path| path.to_s == last_view_path } + 1)
    end
    result = super options
    lookup_context.view_paths = @_view_paths if @_view_paths
    lookup_context.last_template = @_last_template if @_last_template
    result
  else
    @_view_paths ||= lookup_context.view_paths.clone
    last_template = lookup_context.last_template
    current_view = if args[0].is_a?(Hash)
                     {:locals => args[0][:locals], :object => args[0][:object]}
                   else # call is render 'partial', locals_hash
                     {:locals => args[1]}
                   end
    view_stack << current_view if current_view
    lookup_context.view_paths = @_view_paths # reset view_paths in case a view render :super, and then render :partial
    result = super
    view_stack.pop if current_view.present?
    lookup_context.last_template = last_template
    result
  end
end

#view_stackObject



84
85
86
# File 'lib/active_scaffold/extensions/action_view_rendering.rb', line 84

def view_stack
  @_view_stack ||= []
end