instance method polymorphic_url

Ruby on Rails 2.3.18

Since v2.2.3 Last seen in v2.3.18

Available in: v2.2.3 v2.3.18

Signature

polymorphic_url(record_or_hash_or_array, options = {})

Constructs a call to a named RESTful route for the given record and returns the resulting URL string. For example:

# calls post_url(post)
polymorphic_url(post) # => "http://example.com/posts/1"
polymorphic_url([blog, post]) # => "http://example.com/blogs/1/posts/1"
polymorphic_url([:admin, blog, post]) # => "http://example.com/admin/blogs/1/posts/1"
polymorphic_url([user, :blog, post]) # => "http://example.com/users/1/blog/posts/1"

Options

  • :action - Specifies the action prefix for the named route: :new or :edit. Default is no prefix.

  • :routing_type - Allowed values are :path or :url. Default is :url.

Examples

# an Article record
polymorphic_url(record)  # same as article_url(record)

# a Comment record
polymorphic_url(record)  # same as comment_url(record)

# it recognizes new records and maps to the collection
record = Comment.new
polymorphic_url(record)  # same as comments_url()

Parameters

record_or_hash_or_array req
options opt = {}
Source
# File actionpack/lib/action_controller/polymorphic_routes.rb, line 73
    def polymorphic_url(record_or_hash_or_array, options = {})
      if record_or_hash_or_array.kind_of?(Array)
        record_or_hash_or_array = record_or_hash_or_array.compact
        record_or_hash_or_array = record_or_hash_or_array[0] if record_or_hash_or_array.size == 1
      end

      record = extract_record(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].to_s == "new"
          args.pop
          :singular
        when record.respond_to?(:new_record?) && record.new_record?
          args.pop
          :plural
        else
          :singular
        end

      args.delete_if {|arg| arg.is_a?(Symbol) || arg.is_a?(String)}
      named_route = build_named_route_call(record_or_hash_or_array, inflection, options)

      url_options = options.except(:action, :routing_type)
      unless url_options.empty?
        args.last.kind_of?(Hash) ? args.last.merge!(url_options) : args << url_options
      end

      __send__(named_route, *args)
    end

Defined in actionpack/lib/action_controller/polymorphic_routes.rb line 73 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActionController::PolymorphicRoutes

Type at least 2 characters to search.

↑↓ navigate · open · esc close