2013-05-08 9 views
6

Sto creando un blog con Rails e la prima cosa che ho fatto è l'area amministrazione (ormai è l'unica cosa che ho nell'applicazione). Ho usato Bootstrap per progettare rapidamente tutte le pagine e Devise per l'autenticazione.Crea area amministrazione nell'app Rails

Per tutti i modelli, le viste e i controller, ho utilizzato scaffolding e ho generato entrambi i modelli Admin e Post.

Il problema è che ora devo creare il blog REALE e accedere al pannello di amministrazione utilizzando la route /admin. Ad esempio, per creare un nuovo post dovrei accedere a http:/mysite/admin/posts/new.

Un altro problema è che avrò un design completamente diverso nella pagina del blog pubblico (non Bootstrap) e ovviamente avrò controller, visualizzazioni e percorsi diversi.

Quindi, cosa si può fare?

risposta

15

Suggerirei di rimuovere il modello Admin come nel tuo caso sembra più un namespace che un modello. Vorrei invece creare uno spazio dei nomi :admin nel file routes.rb come:

namespace :admin do 
    resources :posts 
end 

Questo farà sì che tutte le rotte all'interno di questo blocco del prefisso w/admin. Quindi l'URL per la modifica di un post sul lato amministratore sarebbe admin/posts/:id/edit.

Avanti Suggerirei di creare uno AdminController da cui erediteranno tutti i controller di amministrazione. In questo modo puoi specificare un nuovo layout. Quindi è possibile creare un Admin::PostsController a app/controllers/admin/posts_controller.rb

app/controllers/admin_controller.rb

class AdminController < ApplicationController 
    layout 'admin' 
end 

app/controller/admin/posts_controller.rb

class Admin::PostsController < AdminController 
    def index 
    # admin/posts 
    end 
end 

app/views /admin/posts/index.html.erb

Hello from the admin/posts view! 
0

Suppongo che la pagina del blog debba essere pubblica, il che significa che non è necessaria alcuna autenticazione per visualizzarlo. Per il resto state già usando Idea per proteggere quell'area.

Per il modello diverso è abbastanza semplice, è possibile creare 2 layout e impostare il layout desiderato nei controller.