Method: ActionDispatch::Routing::Mapper::Base#mount

Defined in:
actionpack/lib/action_dispatch/routing/mapper.rb

#mount(app, options = nil) ⇒ Object

Mount a Rack-based application to be used within the application.

mount SomeRackApp, at: "some_route"

Alternatively:

mount(SomeRackApp => "some_route")

For options, see match, as mount uses it internally.

All mounted applications come with routing helpers to access them. These are named after the class specified, so for the above example the helper is either some_rack_app_path or some_rack_app_url. To customize this helper’s name, use the :as option:

mount(SomeRackApp => "some_route", as: "exciting")

This will generate the exciting_path and exciting_url helpers which can be used to navigate to this mounted app.

Raises:

  • (ArgumentError)


632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 632

def mount(app, options = nil)
  if options
    path = options.delete(:at)
  elsif Hash === app
    options = app
    app, path = options.find { |k, _| k.respond_to?(:call) }
    options.delete(app) if app
  end

  raise ArgumentError, "A rack application must be specified" unless app.respond_to?(:call)
  raise ArgumentError, <<~MSG unless path
    Must be called with mount point

      mount SomeRackApp, at: "some_route"
      or
      mount(SomeRackApp => "some_route")
  MSG

  rails_app = rails_app? app
  options[:as] ||= app_name(app, rails_app)

  target_as       = name_for_action(options[:as], path)
  options[:via] ||= :all

  match(path, { to: app, anchor: false, format: false }.merge(options))

  define_generate_prefix(app, target_as) if rails_app
  self
end