Ошибки маршрутизации при добавлении пространства имен администратора - PullRequest
0 голосов
/ 27 сентября 2011

Я добавил пространство имен администратора в свое приложение, чтобы при входе в область администрирования оно должно было выглядеть следующим образом: admin / website и admin / page / 8

Так вот, что я имею в своих маршрутах. Rb

namespace :admin do |admin|
  match '/' => 'dashboard#index'
  resources :websites
  resources :pages
  resources :sessions
  get 'login' => 'sessions#new', :as => 'login'
  get 'logout' => 'sessions#destroy', :as => 'logout'  
end

У меня есть admin_controller.rb в каталоге app / controllers.

class Admin::BaseController < ApplicationController
  protect_from_forgery
  include UrlHelper
  ...

Я создал каталог администратора внутри приложения / контроллеров. Так что у меня есть это внутри app / controllers / admin / sites_controller.rb

class Admin::WebsitesController < ApplicationController

В некоторых других ответах предлагался класс Admin :: WebsitesController

Итак, в моем файле макета (app / views / layouts / application.html.erb) есть ссылки вроде этой edit_admin_website_path(@website), которые дают мне ошибки маршрутизации Routing Error No route matches {:action=>"edit", :controller=>"admin/websites"} Whyyyy ?! (

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Добавьте файл с именем application_controller.rb в папку администратора с таким содержимым:

class Admin::ApplicationController < ApplicationController
end

Затем для каждого контроллера в этом каталоге расширьте класс Admin :: ApplicationController.

Вы пробовали это?

admin_edit_website_path(@website)
1 голос
/ 27 сентября 2011

Пространства имен Rails полагаются на структуру папок для загрузки нужных классов.Вы должны структурировать его так:

app/controllers
  admin_controller.rb # class AdminController < ApplicationController

app/controllers/admin
  websites_controller.rb # class Admin::WebsitesController < AdminController

AdminController должен быть определен вне папки администратора.Если положить его туда, вы должны будете назвать его Admin::AdminController, что немного странно.На самом деле, вы можете назвать это AdminNamespaceController, чтобы быть понятным.

Вы также можете использовать rails generate, который настроит вас в ожидаемых местах, хотя я не думаю, что это создает базу пространства именкласс для вас, чтобы унаследовать от.

...