2011-09-16 12 views
7

Tenemos un sitio donde tenemos una interfaz de administración de back-end y una interfaz que muestra nuestra información. Estamos utilizando Devise para asegurar la autenticación.¿Las mejores prácticas de Rails para la configuración del sistema de administración de back-end?

El backend debería permitir la edición de tipo normal CRUD de nuestros objetos modelo. Las vistas y el diseño también son completamente diferentes a los frontend. ¿Cuál es la mejor práctica para implementar esto en Rails 3?

Nuestros dos enfoques son: casas de carpetas vista

  1. Un administrador todo ver código específico, así como una carpeta admin en las casas de carpetas controladores de todos los controladores que controlan el acceso específica de administración.
  2. Un sistema de lógica condicional con un conjunto de vistas y controladores, con sentencias if que comprueban si el usuario está en modo de administrador o no.

Cuál es más recomendado, o si hay otro acercamiento que hemos faltado, por favor hágamelo saber.

Respuesta

15

La primera solución es mejor, sin embargo, para estos casos se creó el namespaces y la mejor práctica es ir con espacios de nombres cuando necesita una diferenciación relevante entre el sitio del usuario y el área de administración. Lea más sobre esto here

La estructura de directorios debe tener este aspecto:

controllers/ 
    |--admin/ 
     |--posts_controller.rb 

En sus rutas de poner todo lo que necesita en el administrador de espacio de nombres:

namespace :admin do 
    resources :posts, :comments 
end 

los controladores deben tener una carpeta admin , y un controlador en el área de administración se verá así:

class Admin::PostsController < ApplicationController 
end 

También debe tener una carpeta admin en sus puntos de vista, donde poner los respectivos puntos de vista:

views/ 
    |--admin/ 
     |--posts/ 
      |--index.html.erb 
      |--... 

También puede namespace sus modelos, pero depende de sus necesidades, es bueno cuando se necesita tener una diferencia modelos con el mismo nombre. Por ejemplo, si necesita una tabla diferente para los usuarios administradores, y una tabla diferente para los usuarios normales. Personalmente, no utilizaría el espacio de nombres de modelos, solo en casos muy justificados.

La segunda opción creo que puede causar muchos dolores de cabeza, te perderás en las declaraciones if, no lo recomiendo en absoluto.

Cuestiones relacionadas