Pregunta

Estoy escribiendo una aplicación que, al igual que muchas aplicaciones que existen, es 90% CRUD normal y 10% "jugo", donde necesitamos una lógica empresarial desagradable y más flexibilidad y personalización.

Con respecto a este 90%, intenté ceñirme al principio DRY tanto como pude.Mientras los controladores funcionen, descubrí que Resource_controller realmente funciona y podría deshacerme de todos los controladores en esa área, reemplazándolos por uno genérico.

Ahora me gustaría saber cómo conseguir lo mismo con las vistas.En esta aplicación tengo un diseño general application.html.erb y luego debo tener otra capa de diseño, común para todas las vistas CRUD y finalmente una parte "central":

  • En index.html.erb lo único que necesito es generar una tabla sencilla con los campos y etiquetas que me indican.

  • Para edición nueva y edición, también edición de formularios genéricos, indicando etiquetas y campos (con posibilidad de proporcionar campos personalizados si es necesario).

  • No estoy seguro de necesitar mostrarlo, pero si lo hago sería igual que nuevo y editado.

¿Qué complementos y herramientas (o incluso artículos y sugerencias generales) me ayudarían a lograrlo?

Gracias Felipe.

¿Fue útil?

Solución

Si ha secado los controladores y ahora desea secar las vistas, una solución es render :action => *actionname* y almacenar el contenido de la interfaz de usuario que puede cambiar a variables de instancia (para que estén disponibles en la vista). De esta manera, podrá reutilizar la misma vista de editar, nuevo, lista o espectáculo.Por ejemplo, estás editando algo relacionado con foo entonces tu título debería decir Editing <%= @type %>, también deberían hacerlo sus ayudantes de formulario. foo bien podría entonces cambiar a bar.Por lo tanto, está reutilizando la misma vista para diferentes entidades (o controladores, debería decir).Recuerda que, a diferencia redirect_to, render :action solo representa la vista y no llama a la acción del controlador de la acción que está intentando representar.

Una cosa es segura: si desea SECAR algo, debe estandarizar o seguir una convención.Ejemplo, la estructura de sus vistas, en este caso.

Otros consejos

podrías correr script/generate scaffold test name:string description:text valid:boolean y observe las vistas que genera (y ejecute script/destroy scaffold test para eliminar los archivos).Esto le dará una buena idea de la forma estándar de escribir las 4 vistas predeterminadas de Rails.

También recomendaría leer los capítulos relevantes en "Desarrollo web ágil con Rails" y "The Rails Way".

Si tiene vistas existentes que deben limpiarse, este episodio de Railscasts es excelente: Limpiando la vista

dary

Parece que solo hay una nueva gema que está muy cerca de tus requisitos:

http://github.com/codez/dry_crud

Basado en una superclase común (CrudController), puede heredar la funcionalidad CRUD para sus diversos controladores de modelo y adaptar lo que es especial allí. Esto es lo que ya hiciste, muy probablemente.

Lo nuevo de dry_crud es que también las vistas y los parciales son heredables. Define una plantilla base común para cada acción CRUD, tal vez dividida en un par de parciales. Gracias a los ayudantes proporcionados, los formularios y las tablas se pueden definir genéricamente mirando las definiciones de columna del modelo actual. En las vistas de su modelo específico, puede adaptar solo los parciales o las vistas que necesitan personalizarse.

¡Eche un vistazo a la documentación que se encuentra en el sitio anterior y manténgase SECO!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top