diff --git a/app/views/administrate/application/_sidebar.html.erb b/app/views/administrate/application/_sidebar.html.erb
index aa2a5fd7431661b1fff45ef951dd95cba9c98234..30832fe3ac7b22bbf776f13e4bbefb03933d57bf 100644
--- a/app/views/administrate/application/_sidebar.html.erb
+++ b/app/views/administrate/application/_sidebar.html.erb
@@ -12,7 +12,7 @@ as defined by the routes in the `admin/` namespace
     <li>
       <%= link_to(
         display_resource_name(resource),
-        [namespace, resource],
+        [namespace, resource.path],
         class: "sidebar__link sidebar__link--#{nav_link_state(resource)}"
       ) %>
     </li>
diff --git a/app/views/administrate/application/index.html.erb b/app/views/administrate/application/index.html.erb
index 1bab8de46026c3d8ce310bcaf1546f81098907d2..5ad0827b7ebfbb4522d82abead49c1d45c35458e 100644
--- a/app/views/administrate/application/index.html.erb
+++ b/app/views/administrate/application/index.html.erb
@@ -38,7 +38,7 @@ It renders the `_table` partial to display details about the resources.
   <div class="header__actions">
     <%= link_to(
       "#{t("administrate.actions.new")} #{page.resource_name.titleize.downcase}",
-      [:new, namespace, page.resource_name],
+      [:new, namespace, page.resource_path],
       class: "button",
     ) if valid_action? :new %>
   </div>
diff --git a/lib/administrate/engine.rb b/lib/administrate/engine.rb
index c3419f3899fba9acfc1cae4de3c9f8a8cc644a38..d1f7ccc34e93bc2ac5518f051ce8183c24ff26c7 100644
--- a/lib/administrate/engine.rb
+++ b/lib/administrate/engine.rb
@@ -16,6 +16,7 @@ require "administrate/order"
 require "administrate/resource_resolver"
 require "administrate/search"
 require "administrate/namespace"
+require "administrate/namespace/resource"
 
 module Administrate
   class Engine < ::Rails::Engine
diff --git a/lib/administrate/namespace.rb b/lib/administrate/namespace.rb
index 79ab2e7cc3a602030db24654500924130d90ac24..510fa3ac7adfd9c5c45a86744b087b150528c998 100644
--- a/lib/administrate/namespace.rb
+++ b/lib/administrate/namespace.rb
@@ -5,7 +5,9 @@ module Administrate
     end
 
     def resources
-      @resources ||= routes.map(&:first).uniq.map(&:to_sym)
+      @resources ||= routes.map(&:first).uniq.map do |path|
+        Resource.new(namespace, path)
+      end
     end
 
     def routes
diff --git a/lib/administrate/namespace/resource.rb b/lib/administrate/namespace/resource.rb
new file mode 100644
index 0000000000000000000000000000000000000000..19ab0213c730ac89796c1c6e924ebcc35039bce6
--- /dev/null
+++ b/lib/administrate/namespace/resource.rb
@@ -0,0 +1,28 @@
+module Administrate
+  class Namespace
+    class Resource
+      attr_reader :namespace, :resource
+
+      def initialize(namespace, resource)
+        @namespace = namespace
+        @resource = resource
+      end
+
+      def to_s
+        name.to_s
+      end
+
+      def to_sym
+        name
+      end
+
+      def name
+        resource.to_s.gsub(/^#{namespace}\//, "").to_sym
+      end
+
+      def path
+        name.to_s.gsub("/", "_")
+      end
+    end
+  end
+end
diff --git a/lib/administrate/page/base.rb b/lib/administrate/page/base.rb
index 4f5d52296c0b0672ee69d5aa422b422425911b18..00770ead692912c3936fc9678cd06d73e64ba591 100644
--- a/lib/administrate/page/base.rb
+++ b/lib/administrate/page/base.rb
@@ -11,6 +11,10 @@ module Administrate
           dashboard.class.to_s.scan(/(.+)Dashboard/).first.first.underscore
       end
 
+      def resource_path
+        @resource_path ||= resource_name.gsub("/", "_")
+      end
+
       protected
 
       def attribute_field(dashboard, resource, attribute_name, page)
diff --git a/spec/administrate/namespace_spec.rb b/spec/administrate/namespace_spec.rb
index 22b69b4011e0b5693f7f77d3c3d611a06ac3241e..e790e7dc4ae3ce894b6140a561cc638f69134eb6 100644
--- a/spec/administrate/namespace_spec.rb
+++ b/spec/administrate/namespace_spec.rb
@@ -6,11 +6,12 @@ describe Administrate::Namespace do
     it "searches the routes for resources in the namespace" do
       begin
         namespace = Administrate::Namespace.new(:admin)
+
         Rails.application.routes.draw do
           namespace(:admin) { resources :customers }
         end
 
-        expect(namespace.resources).to eq [:customers]
+        expect(namespace.resources.map(&:to_sym)).to eq [:customers]
       ensure
         reset_routes
       end
diff --git a/spec/administrate/page/base_spec.rb b/spec/administrate/page/base_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1cf3215b2f9f935c18c79f07ab89729abf9b41fc
--- /dev/null
+++ b/spec/administrate/page/base_spec.rb
@@ -0,0 +1,36 @@
+require "rails_helper"
+require "administrate/page/base"
+
+describe Administrate::Page::Base do
+  describe "#resource_name" do
+    it "returns a resource name from the dashboard" do
+      dashboard = OrderDashboard.new
+      dashboard_page = Administrate::Page::Base.new(dashboard)
+
+      expect(dashboard_page.resource_name).to eq "order"
+    end
+
+    it "returns a string for a namespaced resource path" do
+      dashboard = OrderDashboard.new
+      dashboard_page = Administrate::Page::Base.new(dashboard)
+
+      expect(dashboard_page.resource_path).to eq "order"
+    end
+
+    context "when provided a namespaced dashboard" do
+      it "returns a namespaced resource name from the dashboard" do
+        dashboard = Logged::OrderDashboard.new
+        dashboard_page = Administrate::Page::Base.new(dashboard)
+
+        expect(dashboard_page.resource_name).to eq "logged/order"
+      end
+
+      it "returns a string for a namespaced resource path" do
+        dashboard = Logged::OrderDashboard.new
+        dashboard_page = Administrate::Page::Base.new(dashboard)
+
+        expect(dashboard_page.resource_path).to eq "logged_order"
+      end
+    end
+  end
+end
diff --git a/spec/example_app/app/dashboards/logged/order_dashboard.rb b/spec/example_app/app/dashboards/logged/order_dashboard.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a22ba98497cdbfdb5cf2f0bb0ae4dd21930026af
--- /dev/null
+++ b/spec/example_app/app/dashboards/logged/order_dashboard.rb
@@ -0,0 +1,39 @@
+require "administrate/base_dashboard"
+
+module Logged
+  class OrderDashboard < Administrate::BaseDashboard
+    ATTRIBUTE_TYPES = {
+      id: Field::Number,
+      created_at: Field::DateTime,
+      updated_at: Field::DateTime,
+      address_line_one: Field::String,
+      address_line_two: Field::String,
+      address_city: Field::String,
+      address_state: Field::String,
+      address_zip: Field::String,
+      customer: Field::BelongsTo,
+      line_items: Field::HasMany,
+      total_price: Field::Number.with_options(prefix: "$", decimals: 2),
+      shipped_at: Field::DateTime,
+    }
+
+    READ_ONLY_ATTRIBUTES = [
+      :id,
+      :total_price,
+      :created_at,
+      :updated_at,
+    ]
+
+    COLLECTION_ATTRIBUTES = [
+      :id,
+      :customer,
+      :address_state,
+      :total_price,
+      :line_items,
+      :shipped_at,
+    ]
+
+    FORM_ATTRIBUTES = ATTRIBUTE_TYPES.keys - READ_ONLY_ATTRIBUTES
+    SHOW_PAGE_ATTRIBUTES = ATTRIBUTE_TYPES.keys
+  end
+end