Module: ActionDispatch::Routing::PolymorphicRoutes

### Home Classes Methods

### In Files

- lib/action_dispatch/routing/polymorphic_routes.rb

### Methods

- #polymorphic_path
- #polymorphic_url

### Class/Module Index

Quicksearch

- ActionDispatch
- ActionDispatch::Assertions
- ActionDispatch::Assertions::DomAssertions
- ActionDispatch::Assertions::ResponseAssertions
- ActionDispatch::Assertions::RoutingAssertions
- ActionDispatch::Assertions::SelectorAssertions
- ActionDispatch::Assertions::TagAssertions
- ActionDispatch::BestStandardsSupport
- ActionDispatch::BodyProxy
- ActionDispatch::Callbacks
- ActionDispatch::Cookies
- ActionDispatch::Cookies::CookieOverflow
- ActionDispatch::DebugExceptions
- ActionDispatch::ExceptionWrapper
- ActionDispatch::FileHandler
- ActionDispatch::Flash
- ActionDispatch::Flash::FlashHash
- ActionDispatch::Head
- ActionDispatch::Http
- ActionDispatch::Http::Cache
- ActionDispatch::Http::Cache::Request
- ActionDispatch::Http::Cache::Response
- ActionDispatch::Http::FilterParameters
- ActionDispatch::Http::Headers
- ActionDispatch::Http::MimeNegotiation
- ActionDispatch::Http::ParameterFilter
- ActionDispatch::Http::Parameters
- ActionDispatch::Http::URL
- ActionDispatch::Http::Upload
- ActionDispatch::Http::UploadedFile
- ActionDispatch::Integration
- ActionDispatch::Integration::RequestHelpers
- ActionDispatch::Integration::Runner
- ActionDispatch::Integration::Session
- ActionDispatch::IntegrationTest
- ActionDispatch::MiddlewareStack
- ActionDispatch::MiddlewareStack::Middleware
- ActionDispatch::ParamsParser
- ActionDispatch::PerformanceTest
- ActionDispatch::PublicExceptions
- ActionDispatch::RailsEntityStore
- ActionDispatch::RailsMetaStore
- ActionDispatch::Railtie
- ActionDispatch::Reloader
- ActionDispatch::RemoteIp
- ActionDispatch::RemoteIp::GetIp
- ActionDispatch::RemoteIp::IpSpoofAttackError
- ActionDispatch::Request
- ActionDispatch::RequestId
- ActionDispatch::Rescue
- ActionDispatch::Response
- ActionDispatch::Routing
- ActionDispatch::Routing::Mapper
- ActionDispatch::Routing::Mapper::Base
- ActionDispatch::Routing::Mapper::HttpHelpers
- ActionDispatch::Routing::Mapper::Resources
- ActionDispatch::Routing::Mapper::Scoping
- ActionDispatch::Routing::PolymorphicRoutes
- ActionDispatch::Routing::Redirection
- ActionDispatch::Routing::RouteSet
- ActionDispatch::Routing::RouteSet::MountedHelpers
- ActionDispatch::Routing::UrlFor
- ActionDispatch::Session
- ActionDispatch::Session::AbstractStore
- ActionDispatch::Session::CacheStore
- ActionDispatch::Session::Compatibility
- ActionDispatch::Session::CookieStore
- ActionDispatch::Session::DestroyableSession
- ActionDispatch::Session::MemCacheStore
- ActionDispatch::Session::StaleSessionCheck
- ActionDispatch::ShowExceptions
- ActionDispatch::Static
- ActionDispatch::TestProcess
- ActionDispatch::TestRequest
- ActionDispatch::TestResponse
- ActionController
- ActionController::Base
- ActionController::Caching
- ActionController::Caching::Actions
- ActionController::Caching::Actions::ActionCachePath
- ActionController::Caching::Actions::ClassMethods
- ActionController::Caching::ConfigMethods
- ActionController::Caching::Fragments
- ActionController::Caching::Pages
- ActionController::Caching::Pages::ClassMethods
- ActionController::Caching::Sweeping
- ActionController::Compatibility
- ActionController::ConditionalGet
- ActionController::Cookies
- ActionController::DataStreaming
- ActionController::Flash
- ActionController::ForceSSL
- ActionController::ForceSSL::ClassMethods
- ActionController::Head
- ActionController::Helpers
- ActionController::Helpers::ClassMethods
- ActionController::HideActions
- ActionController::HideActions::ClassMethods
- ActionController::HttpAuthentication
- ActionController::HttpAuthentication::Basic
- ActionController::HttpAuthentication::Basic::ControllerMethods
- ActionController::HttpAuthentication::Basic::ControllerMethods::ClassMethods
- ActionController::HttpAuthentication::Digest
- ActionController::HttpAuthentication::Digest::ControllerMethods
- ActionController::HttpAuthentication::Token
- ActionController::HttpAuthentication::Token::ControllerMethods
- ActionController::ImplicitRender
- ActionController::Instrumentation
- ActionController::Instrumentation::ClassMethods
- ActionController::LogSubscriber
- ActionController::Metal
- ActionController::Middleware
- ActionController::Middleware::ActionMiddleware
- ActionController::MimeResponds
- ActionController::MimeResponds::ClassMethods
- ActionController::ParamsWrapper
- ActionController::ParamsWrapper::ClassMethods
- ActionController::RackDelegation
- ActionController::Railtie
- ActionController::Railties
- ActionController::Railties::Paths
- ActionController::RecordIdentifier
- ActionController::Redirecting
- ActionController::Renderers
- ActionController::Renderers::All
- ActionController::Renderers::ClassMethods
- ActionController::Rendering
- ActionController::RequestForgeryProtection
- ActionController::RequestForgeryProtection::ClassMethods
- ActionController::Rescue
- ActionController::Responder
- ActionController::SessionManagement
- ActionController::SessionManagement::ClassMethods
- ActionController::Streaming
- ActionController::TemplateAssertions
- ActionController::TestCase
- ActionController::TestCase::Behavior
- ActionController::TestCase::Behavior::ClassMethods
- ActionController::TestCase::RaiseActionExceptions
- ActionController::TestResponse
- ActionController::Testing
- ActionController::Testing::ClassMethods
- ActionController::UrlFor
- ActionView
- ActionView::Base
- ActionView::Context
- ActionView::FileSystemResolver
- ActionView::FixtureResolver
- ActionView::Helpers
- ActionView::Helpers::ActiveModelHelper
- ActionView::Helpers::ActiveModelInstanceTag
- ActionView::Helpers::AssetPaths
- ActionView::Helpers::AssetTagHelper
- ActionView::Helpers::AssetTagHelper::AssetIncludeTag
- ActionView::Helpers::AssetTagHelper::JavascriptIncludeTag
- ActionView::Helpers::AssetTagHelper::JavascriptTagHelpers
- ActionView::Helpers::AssetTagHelper::JavascriptTagHelpers::ClassMethods
- ActionView::Helpers::AssetTagHelper::StylesheetIncludeTag
- ActionView::Helpers::AssetTagHelper::StylesheetTagHelpers
- ActionView::Helpers::AssetTagHelper::StylesheetTagHelpers::ClassMethods
- ActionView::Helpers::AtomFeedHelper
- ActionView::Helpers::AtomFeedHelper::AtomBuilder
- ActionView::Helpers::AtomFeedHelper::AtomFeedBuilder
- ActionView::Helpers::CacheHelper
- ActionView::Helpers::CaptureHelper
- ActionView::Helpers::CsrfHelper
- ActionView::Helpers::DateHelper
- ActionView::Helpers::DateHelperInstanceTag
- ActionView::Helpers::DebugHelper
- ActionView::Helpers::FormBuilder
- ActionView::Helpers::FormHelper
- ActionView::Helpers::FormOptionsHelper
- ActionView::Helpers::FormTagHelper
- ActionView::Helpers::InstanceTag
- ActionView::Helpers::JavaScriptHelper
- ActionView::Helpers::OutputSafetyHelper
- ActionView::Helpers::RecordTagHelper
- ActionView::Helpers::RenderingHelper
- ActionView::Helpers::SanitizeHelper
- ActionView::Helpers::TagHelper
- ActionView::Helpers::TextHelper
- ActionView::Helpers::TranslationHelper
- ActionView::Helpers::UrlHelper
- ActionView::LogSubscriber
- ActionView::LookupContext
- ActionView::LookupContext::DetailsCache
- ActionView::LookupContext::ViewPaths
- ActionView::NullResolver
- ActionView::PartialRenderer
- ActionView::Railtie
- ActionView::Renderer
- ActionView::Resolver
- ActionView::Resolver::Path
- ActionView::Template
- ActionView::Template::Handlers
- ActionView::Template::Handlers::Builder
- ActionView::Template::Handlers::ERB
- ActionView::Template::Handlers::Erubis
- ActionView::TestCase
- ActionView::TestCase::Behavior
- ActionView::TestCase::Behavior::ClassMethods
- ActionView::TestCase::Behavior::Locals
- ActionView::TestCase::TestController
- AbstractController
- AbstractController::ActionNotFound
- AbstractController::AssetPaths
- AbstractController::Base
- AbstractController::Callbacks
- AbstractController::Callbacks::ClassMethods
- AbstractController::Collector
- AbstractController::DoubleRenderError
- AbstractController::Error
- AbstractController::Helpers
- AbstractController::Helpers::ClassMethods
- AbstractController::Layouts
- AbstractController::Layouts::ClassMethods
- AbstractController::Layouts::ClassMethods::LayoutConditions
- AbstractController::Logger
- AbstractController::Railties
- AbstractController::Railties::RoutesHelpers
- AbstractController::Rendering
- AbstractController::Rendering::ClassMethods
- AbstractController::Translation
- AbstractController::UrlFor
- AbstractController::UrlFor::ClassMethods
- AbstractController::ViewPaths
- AbstractController::ViewPaths::ClassMethods
- Sprockets
- Sprockets::Bootstrap
- Sprockets::Compressors
- Sprockets::Helpers
- Sprockets::Helpers::IsolatedHelper
- Sprockets::Helpers::RailsHelper
- Sprockets::Helpers::RailsHelper::AssetPaths
- Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError
- Sprockets::Railtie
- Sprockets::StaticCompiler
- HTML
- HTML::FullSanitizer
- HTML::LinkSanitizer
- HTML::Sanitizer
- HTML::Selector
- HTML::Tag
- HTML::WhiteListSanitizer
- Mime
- Mime::Mimes
- Mime::Type
- ActionPack
- Object
- Rack

No matching classes.

# ActionDispatch::Routing::PolymorphicRoutes

Polymorphic URL helpers are methods for smart resolution to a named route call when given an Active Record model instance. They are to be used in combination with ActionController::Resources.

These methods are useful when you want to generate correct URL or path to a RESTful resource without having to know the exact type of the record in question.

Nested resources and/or namespaces are also supported, as illustrated in the example:

    polymorphic_url([:admin, @article, @comment])

results in:

    admin_article_comment_url(@article, @comment)

## Usage within the framework

Polymorphic URL helpers are used in a number of places throughout the Rails framework:

- `url_for`, so you can use it with a record as the argument, e.g. `url_for(@article)`;

- ActionView::Helpers::FormHelper uses `polymorphic_path`, so you can write `form_for(@article)` without having to specify `:url` parameter for the form action;

- `redirect_to` (which, in fact, uses `url_for`) so you can write `redirect_to(post)` in your controllers;

- ActionView::Helpers::AtomFeedHelper, so you don't have to explicitly specify URLs for feed entries.

## Prefixed polymorphic helpers

In addition to `polymorphic_url` and `polymorphic_path` methods, a number of prefixed helpers are available as a shorthand to `:action => "..."` in options. Those are:

- `edit_polymorphic_url`, `edit_polymorphic_path`

- `new_polymorphic_url`, `new_polymorphic_path`

Example usage:

    edit_polymorphic_path(@post)              # => "/posts/1/edit"
    polymorphic_path(@post, :format => :pdf)  # => "/posts/1.pdf"

## Using with mounted engines

If you use mounted engine, there is a possibility that you will need to use polymorphic_url pointing at engine's routes. To do that, just pass proxy used to reach engine's routes as a first argument:

For example:

polymorphic_url([blog, @post]) # it will call blog.post_path(@post) form_for([blog, @post]) # => "/blog/posts/1

### Public Instance Methods

polymorphic_path(record_or_hash_or_array, options = {}) click to toggle source

Returns the path component of a URL for the given record. It uses `polymorphic_url` with `:routing_type => :path`.

    # File lib/action_dispatch/routing/polymorphic_routes.rb, line 134
    def polymorphic_path(record_or_hash_or_array, options = {})
      polymorphic_url(record_or_hash_or_array, options.merge(:routing_type => :path))
    end

polymorphic_url(record_or_hash_or_array, options = {}) click to toggle source

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"
    polymorphic_url(Comment) # => "http://example.com/comments"

#### 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()

    # the class of a record will also map to the collection
    polymorphic_url(Comment) # same as comments_url()

    # File lib/action_dispatch/routing/polymorphic_routes.rb, line 90
    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
        if record_or_hash_or_array.first.is_a?(ActionDispatch::Routing::RoutesProxy)
          proxy = record_or_hash_or_array.shift
        end
        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)
      record = convert_to_model(record)

      args = Array === record_or_hash_or_array ?
        record_or_hash_or_array.dup :
        [ record_or_hash_or_array ]

      inflection = if options[:action] && options[:action].to_s == "new"
        args.pop
        :singular
      elsif (record.respond_to?(:persisted?) && !record.persisted?)
        args.pop
        :plural
      elsif record.is_a?(Class)
        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

      args.collect! { |a| convert_to_model(a) }

      (proxy || self).send(named_route, *args)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.