Почему пространство имен и вложенный маршрут генерируют URL, что приводит к ошибке маршрутизации? - PullRequest
0 голосов
/ 23 марта 2012
# config/routes.rb
namespace :admin do
  namespace :product do
    resources :categories do
      resources :properties
    end
  end
end

admin_product_category_properties_path(category) генерирует URL http://localhost:3000/admin/product/categories/3/properties.Но этот URL приводит к ошибке маршрутизации:

Routing Error
uninitialized constant Admin::Product::PropertiesController

Нужно искать Admin :: Product :: Categories :: PropertiesController, почему бы и нет?

Iзнаете, я могу исправить это следующим образом:

# config/routes.rb
namespace :admin do
  namespace :product do
    resources :categories do
      resources :properties, :controller => 'categories/property_types'
    end
  end
end

Но зачем мне это делать, если Rails еще не знает контекст?


Почему пространство имен?

У меня есть следующие модели:

product
product::category
product::category::property

Пространство имен там, потому что у меня есть другие модели, которые имеют категории.

1 Ответ

1 голос
/ 23 марта 2012

Вложенные маршруты не совпадают с маршрутами в пространстве имен

# Nested routes
namespace :admin do
  namespace :product do
    resources :categories do
      resources :properties
    end
  end
end
# controller: Admin::Product::PropertiesController
# routes: /admin/product/categories/:category_id/properties

против

# Namespaced routes
namespace :admin do
  namespace :product do
    namespace :categories do
      resources :properties
    end
  end
end
# controller: Admin::Product::Categories::PropertiesController
# route: /admin/product/categories/properties

В первом примере вы указываете, что все свойства вложены и доступны определенной категории (отсюда :category_id в маршруте). В последнем примере вы просто присваиваете имена свойств по категориям (:category_id не требуется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...