2010-07-06 8 views
5

Una aplicación ficticios Carriles tiene los siguientes recursos:rieles vías de estructuración admin/usuario/controladores públicas

Photographers 
Images 
Comments 

Un Photographer tiene muchas Images, que tienen muchos Comments

Cada fotógrafo tiene un inicio de sesión y es capaz de ver, cargar, editar y eliminar sus imágenes, comentarios y su propio perfil.

Hay una interfaz de administración disponible que puede editar imágenes, fotógrafos y comentarios.

Además, el fotógrafo, sus imágenes y sus comentarios están disponibles desde una interfaz pública sin inicio de sesión donde los visitantes pueden agregar comentarios.

Mi pregunta es: ¿Cuál es la manera de estructurar los controladores? Yo estaba pensando en ir con espacios de nombres para cada 'papel' (público, cuenta, admin) de esta manera:

# For administrator 
Admin::PhotographersController 
Admin::ImagesController 
Admin::CommentsController 

# For a logged in photographer 
AccountController (?) 
Account::ImagesController 
Account::CommentsController 

# For public 
PhotographersController 
ImagesController 
CommentsController 

Sin embargo - algunos de los métodos de estos controladores se solapan. ¿Es esta la mejor manera, a pesar de que no es tan SECO?

Gracias!

Respuesta

3

Si se superponen, puede extender los controladores base a los espacios de nombres de cuenta/administración. por ejemplo, usted hace su ImagesController que es para las acciones que todos pueden ver. Esto extiende ApplicationController de forma normal. Luego haces tu versión administrativa de ImageController, y eso extiende ImagesController. Luego agrega/reemplaza métodos en la versión de administración para los comportamientos diferentes requeridos, o puede ser tan simple como agregar un par de filtros anteriores como require_admin por ejemplo, que verifica que current_user es un usuario administrador y los redirige si no.

2

como dijiste, esto no es realmente SECO. al menos, se podría estructurar rutas y controladores para actuar en todos los requisitos, por ejemplo:

resources :photos, :only => [:index, :show] # offer only index and show actions to public 

scope "/admin" do 
    resources :photos # full access for logged in users 
end 

si también necesita indexar y mostrar acciones, se puede añadir un poco de cheques dentro de ellas para cargar un punto de vista diferente (decir que tener un diseño público y de administrador).

Otra forma podría ser tener un diseño único, no/admin/sections y ofrecer funciones de edición para los usuarios que hayan iniciado sesión. por lo tanto, si está registrado y es dueño de alguna foto, permita la edición y muestre los enlaces de contexto. es una cuestión de gustos: P

Cuestiones relacionadas