Me parece excelente que busques las mejores practicas. Creo que lo mejor que podes hacer es mantener las cosas a la Rails. Intenta despojarte del bagaje que hayas ido juntando con los frameworks que hayas usado antes. En mi opinión debes mantenerte lo mas apegado al MVC y a REST, eso te quita un montón de dolores de cabeza. Siempre vas a tener algun metodo que se salga de este encuadre, pero cuanto mas lo respetes mejores resultados vas a tener. Esto es importante porque la estructura de carpetas que te ofrece Rails favorece la convención por sobre la configuración, es decir, si pones las cosas donde debes no vas a necesitar especificar en donde están. La idea es mantenerlo simple. Viéndolo vas a entenderlo mejor: 1) Create una aplicación: rails mytestapp
si te fijas en la estructura de directorios creada, tenes la carpeta app con sus subcarpetas controllers, helpers, models y views, no? Si bien vi por ahí algunas aplicaciones Rails con variantes, deberías mantenerlo así. 2) en tu consola: script/generate scaffold MyModel name:string height:float weight:float measures:srtingEsto te va a generar: * 1 controlador (app/controllers/my_model_controller.rb): aca pones la logica que "controla" como de tu aplicación debe comportarse. * 1 modelo (app/models/my_model.rb): aca pones todo lo referente al objetos de negocio en cuestion. * 4 vistas (index, new, edit y show, todos con la extension .html.erb y en la carpeta app/views/my_model) * 1 helper (app/helpers/my_model_helper.rb): aca podrias los metodos que "ayudan" a que tus vistas no estén tan cargadas de lógica. (Perdón si me voy en obviedades, pero puede servirle alguien mas) A la hora de codificar tendrias que tener en cuenta de mantener un equilibrio en el MVC. No es muy recomedable, por ejemplo, meter mucha logica dentro de las vistas y dejar el modelo y el controlador casi sin código. Una "técnica" que he estado comprobando ultimamente es la llamada "fat model, skinny controller": tu logica de negocio la volcás en el modelo (validaciones, metodos de instancia que te "precocinen" las cosas), dejando solo las cuestiones netamente de "flujo de la aplicación" al controlador (acá podes validar, por ejemplo, que el usuario actual tenga permiso de acceso para un recurso). Con respecto a las vistas, como veras todas van a la carpeta que corresponde al nombre del controlador dentro de app/views. Tenes los layouts en app/views/layouts... (creo que no da para explicar esto). Con respecto a los parciales deberias ubicarlos dentro del la carpeta de la vista correspondiente (ej: incluis el parcial en tu vista con <%= render :partial => "model" %>, y el parcial con el nombre _model.html.erb en la carpeta app/views/model). Una buena práctica es crearte una carpeta shared en app/views y meter alli todos los parciales que sean compartidos por vistas de varios controladores. Pero cuando lo llames vas a tener que hacerlo de esta forma: render :partial => "shared/model" (si, no tenes que poner el guión bajo después del la barra inclinada: render :partial => "shared/_model" = "Missing template shared/__model.erb in view path app/views", OK?) Ah! una mas, de yapa (aunque offtopic quizá) que requiere que tengas manejo del inglés: si no es obligatorio que desarrolles en castellano, te recomiendo que desarrolles lo mas posible en inglés. Desarrollar en el mismo idioma en el que fue pensado Rails (con sus pluralization y demas) te va a dar menos dolores de cabeza y hacer de tu trabajo algo mas profesional y estandar. Rails tiene un gran soporte para la internacionalización (I18N) con lo que los usuarios finales no se van a dar cuenta de lo que pasa de fondo, y es una buena inversión para futuros clientes del extranjero. La totalidad de estas prácticas las hemos estado poniendo en práctica en el Departamento de Desarrollos Web de la universidad en donde trabajo ( www.uap.edu.ar, todavía esta en php... pronto en Rails), estamos trabajando de esta manera y nos esta dando grandes resultados. Bueno, espero de alguna forma haber respondido tus dudas y no haberte complicado mas. Cualquier duda, o consulta sobre esto, aquí estoy. Eduardo Omar Ludi P/D: Agile Web Development with Rails (Third Edition), Chapter 22: Action View (si podes leerte el libro entero mejor, esta genial).
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
