2011-09-27 4 views
0

я добавил пространство имен администратора мое приложение так при входе в администрации области, она должна была бы быть, как это: Администратор/веб-сайты и администратора/страница/8маршрутизации ошибок при добавлении администратора имен

Так что это является то, что у меня в routes.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 в приложение каталога/контроллеров.

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

Я создал каталог администратора внутри приложений/контроллеров. Таким образом, у меня есть это внутри приложение/контроллеры/Администратор/websites_controller.rb

class Admin::WebsitesController < ApplicationController 

Некоторые другие ответы, предлагаемые класс Администратор :: WebsitesController < администратора :: BaseController, но никогда не работал для меня. Если я ошибаюсь, дайте мне знать.

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

+2

Параметры URL-адреса, которые эта ошибка возвращает, обычно должны быть '{: action =>" edit ",: controller =>" admin/websites ",: id => 3}' или независимо от идентификатора, можете ли вы проверить, '@ website' не нуль, а' @ website' сохраняется (а не 'new_record?') –

+0

Какую версию Rails вы используете? –

+1

аккуратный трюк: если вы найдете 'edit_admin_website_path (@website)' слишком многословным, вы можете использовать (по крайней мере, для помощников URL/link): '[: edit,: admin, @website]' –

ответ

3

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

class Admin::ApplicationController < ApplicationController 
end 

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

.

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

admin_edit_website_path(@website) 
+0

Мне нравится этот ответ лучше, чем у меня. :) –

+0

Извините за путь, я внес изменения в контроллеры, а @website больше не загружается. Поэтому я просто создал метод помощи, доступный для всех контроллеров, называемых current_website, и закодировал это вместо admin_edit_website_path (current_website) – leonel

+0

Почему этот подход будет считаться лучше? – leonel

1

Rails пространств имен полагаются на структуру папок для загрузки нужных классов. Y НУ должны структурировать это следующим образом:

app/controllers 
    admin_controller.rb # class AdminController < ApplicationController 

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

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

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

+0

Исправлено. Благодаря! – leonel

Смежные вопросы