en mi aplicación, tengo un modelo de "Usuario". Cada usuario puede tener varias direcciones (correo electrónico) que se definen en el modelo de "Dirección":Un controlador, diferentes vistas para usuarios normales y administradores
Class User < ActiveRecord::Base
has_many :addresses
def is_authorized(op)
# returns true or false
end
def is_owned_by(user)
# returns true or false
end
end
Class Address < ActiveRecord::Base
belongs_to :user
end
Dentro de la clase AddressController, el usuario actualmente conectado está disponible en la variable de instancia "@user". El controlador evita que los usuarios comunes editen, eliminen, visualicen direcciones etc. que no les pertenecen, pero permite que un usuario administrativo las edite. La clase AddressController puede preguntar al AddressModel si el usuario actualmente conectado está realizando operaciones normales o de superusuario.
Todo esto funciona bien y las actualizaciones de la base de datos se realizan como se esperaba, sin embargo, me gustaría tener diferentes vistas de HTML dependiendo del modo de operación. Sólo puedo pensar en dos formas de lograr que:
- Hacer el modo de funcionamiento (normal/privilegiada) conocidos en la clase AddressController (utilizando una variable de instancia, por ejemplo @privileged) y utilizar un "if" en la vista.
- Utilice algo así como un "after_filter" en el controlador de dirección para representar un diseño diferente.
Si es posible visualizar los resultados de ejecutar un solo controlador en dos diseños completamente diferentes, dependiendo de su modo de operación, ¿cuál es una buena manera de lograr eso?
Gracias de antemano Stefan
Gracias. Pero parece que si hago esto, dejaré el camino de "convención sobre configuración". Estoy un poco preocupado - esta es mi primera aplicación de Rails - ¿Debería ya diferir de lo que todos parecen hacer? – cite
Bueno, podría decirse que es una convención presentar una vista para una acción, pero puedo ver a qué te refieres. Si solo está buscando diseños diferentes, entonces la solución de Staelen es buena. Si realmente desea renderizar diferentes vistas dependiendo de la lógica en la acción, entonces no estoy seguro de que esté lo suficientemente cerca de la convención básica para salirse con la suya sin especificar qué vista desea renderizar. – Shadwell
Creo que probaré la solución de Staelen para el diseño y la de la plantilla para que se represente. Gracias de nuevo. – cite