2011-11-16 6 views
5

Tengo un modelo y un controlador Search. La lógica comercial es que si la palabra clave exacta del usuario coincide con el número de modelo de un producto, redirija a la página del producto.Buenas prácticas: ¿Redirección en los modelos? - Rails 3.1

En esta situación, ¿debería hacer la redirección desde el interior del modelo (donde ya reside la mayor parte de la lógica)?

¿O debería devolver una bandera o algo al controlador para que pueda manejar la redirección?

Respuesta

9

El objeto modelo no puede y nunca debe hacer una redirección. La lógica de la aplicación es el deber del controlador, por lo que el controlador debe preguntar al objeto modelo (como resultado de una solicitud) si el producto coincide con un número de modelo, y luego el controlador realiza la redirección. El objeto modelo no debe saber nada sobre el controlador o las vistas. Esto es parte de "Model-View-Controller concept" esto es implementado por Rails.

Rails implementa el modelo como ActiveRecord pattern, por lo que está bien que el objeto modelo sea responsable de la base de datos, y eso incluye la búsqueda en la base de datos. Vea las muchas opciones que tiene en el Rails Guides for ActiveRecord Queries para ver lo que cae bajo la responsabilidad de los objetos modelo.

+0

¿Está bien tener una función run_search en el modelo que realice todas las búsquedas en el archivo db (en varios modelos) o es mejor hacer que el controlador también lo haga? – Jacob

+0

Expandiré mi respuesta. – mliebelt

4

Recuerde siempre patrón MVC: MVC in Rails

modelo no debe tener cuidado de redirección o algunas otras cosas que se relacionó con el controlador. Deje que la redirección esté en el controlador.