开发者

Routing errors when adding an Admin namespace

开发者 https://www.devze.com 2023-04-08 07:42 出处:网络
I added an Admin namespace to my app so when logging in to the administration area, it would have to be like this: admin/websites and admin/page/8

I added an Admin namespace to my app so when logging in to the administration area, it would have to be like this: admin/websites and admin/page/8

So this is what I have in my 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

I have admin_controller.rb in app/controllers directory.

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

I created an admin directory inside app/controllers. So I have this inside app/controllers/admin/websites_controller.rb

class Admin::WebsitesController < ApplicationController

Some other answers suggested class Admin::WebsitesController < Admin::BaseController, but that never worked for me. If I'm wrong please let me know.

So then in my layout file (app/views/layouts/application.html.erb) 开发者_如何学运维I have links like this one edit_admin_website_path(@website) that give me routing errors Routing Error No route matches {:action=>"edit", :controller=>"admin/websites"} Whyyyy?! :(


Add a file named application_controller.rb in the admin directory with this content:

class Admin::ApplicationController < ApplicationController
end

Then, for each controller on this directory, extend the Admin::ApplicationController class.

Did you try this?

admin_edit_website_path(@website)


Rails namespaces rely on folder structure for loading the right classes. You should structure it like this:

app/controllers
  admin_controller.rb # class AdminController < ApplicationController

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

The AdminController should be defined outside the admin folder. If put it in there you'd have to refer to it as Admin::AdminController which is a little odd. In fact, you could call it AdminNamespaceController to be clear.

You can also use rails generate which will set things up for you in the expected places, although I don't think it creates the namespace base class for you to inherit from.

0

精彩评论

暂无评论...
验证码 换一张
取 消