2017-02-21 47 views
1

我试图做一个具有公共区域和管理仪表板的应用程序。如何正确使用管理员/路由?

对于公共区域,我只使用一个名为Public的控制器,并为它提供了很多意见。每个视图都是我的前端区域,以及文件夹的意见/公开。他们是像接触,关于我们等网页。但最后,我不想在我的网站上有公开字样。我只是想要像这样:http://localhost:3000/contact,并去正确的地方。这个联系人视图中的表单也是一样。

而我有管理员的另一个问题。首先,我创建了控制器,其视图:索引,登录注销。之后,我做了一个活动控制器,与意见:索引,新,编辑,显示,删除,销毁和更新

所以,我不知道是否即时通讯思想这一权利,但搜索关于这个问题后,我做了这样一个范围路线事件控制器:

scope module: 'admin', path: 'admin' do 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

我不得不把下发生的事件的看法文件夹views/admin然后更改控制器类名称,将它们的名称放在Admin ::之前。此外,控制器Admin事件现在位于文件夹controllers/admin

事件控制器和其意见似乎工作正确。即使是CRUD网址。但我不知道如何将控制器路由置于管理范围之下。 我的目的是让喜欢这部作品的网址:http://localhost:3000/admin/ ,它应该带我去:管理/管理#指数

我试图把联系路线下管理范围太多,但它没有工作。它是这样的:

scope module: 'admin', path: 'admin' do 
    get 'admin/index' 
    get 'admin/login' 
    get 'admin/logout' 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

我已经试过这也:

scope module: 'admin', path: 'admin' do 
    get 'index' 
    get 'login' 
    get 'logout' 
    resources :events do  
     member do 
      get :delete 
      end 
     end 
    end 

没有工作无论是。我对这条路线的事情有正确的想法吗?如果不是,我错过了什么?

+0

对于非命名空间,非'admin/admin',只需'admin /'到'controllers/admin_controller.rb',使用'controller:admin do; get'admin /',action::index; 结束' – Chloe

回答

1

您需要知道哪个控制器应该处理index,loginlogout ...

如果你想要像管理:: AdminController一个命名空间AdminController,你能做到这一点

namespace :admin do 
    controller :admin do 
    get '/', action: :index 
    get :login 
    get :logout 
    end 
    resources :events 
end 

它会生成这些路线

  Prefix Verb URI Pattern      Controller#Action 
      admin GET /admin(.:format)     admin/admin#index 
    admin_login GET /admin/login(.:format)   admin/admin#login 
    admin_logout GET /admin/logout(.:format)   admin/admin#logout 
    admin_events GET /admin/events(.:format)   admin/events#index 
       POST /admin/events(.:format)   admin/events#create 
new_admin_event GET /admin/events/new(.:format)  admin/events#new 
edit_admin_event GET /admin/events/:id/edit(.:format) admin/events#edit 
    admin_event GET /admin/events/:id(.:format)  admin/events#show 
       PATCH /admin/events/:id(.:format)  admin/events#update 
       PUT /admin/events/:id(.:format)  admin/events#update 
       DELETE /admin/events/:id(.:format)  admin/events#destroy 
+0

它的工作。但是对于管理员区域,我必须将我的** Admin **控制器的所有视图移至文件夹** views/admin/admin **。包含的布局文件。 所以,现在,在我的** Events **控制器上,我必须调用这样的布局:**布局“admin/admin”**。可以保持这样吗? – churros

+0

即使使用命名空间,当您更改它时,rails会搜索布局文件的默认位置位于'views/layout' ...对于该位置的布局,您可以将其称为“admin”(对于“views /布局/ admin.html.erb') 如果你把你的布局文件放在其他地方,这只是一个设置正确位置的问题......在你的地方,我会创建一个'admin.html.erb',放置它在'views/layout'和控制器上渲染它添加'layout:admin' – cefigueiredo

+0

ok @cefigueiredo,我将它移回到视图/布局及其工作,但不是在我的控制器** Admin **上。我不得不放在线**布局“管理员”**,使其工作。 但是,为什么?控制器不会自动搜索具有他的名字的布局吗? – churros

0

指定公开的路线

get "/contact",  to: "public#contact",  as: :contact 

分开你的管理路线:

namespace :admin do 
    get :login, to: "admin#login" 
    post :logout, to: "admin#logout" 
    root "admin#root" 
end