Module: ActionController::PolymorphicRoutes

Included in:
Routing::Helpers
Defined in:
lib/action_controller/polymorphic_routes.rb

Instance Method Summary collapse

Instance Method Details

#polymorphic_path(record_or_hash_or_array) ⇒ Object



30
31
32
# File 'lib/action_controller/polymorphic_routes.rb', line 30

def polymorphic_path(record_or_hash_or_array)
  polymorphic_url(record_or_hash_or_array, :routing_type => :path)
end

#polymorphic_url(record_or_hash_or_array, options = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/action_controller/polymorphic_routes.rb', line 3

def polymorphic_url(record_or_hash_or_array, options = {})
  record = extract_record(record_or_hash_or_array)

  namespace = extract_namespace(record_or_hash_or_array)
  
  args = case record_or_hash_or_array
    when Hash;  [ record_or_hash_or_array ]
    when Array; record_or_hash_or_array.dup
    else        [ record_or_hash_or_array ]
  end

  inflection =
    case
    when options[:action] == "new"
      args.pop
      :singular
    when record.respond_to?(:new_record?) && record.new_record?
      args.pop
      :plural
    else
      :singular
    end
  
  named_route = build_named_route_call(record_or_hash_or_array, namespace, inflection, options)
  send!(named_route, *args)
end