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

Responder a