Consejo para el buen uso de helpers

hola,

Consideren por favor lo siguiente :

#appplication.css

#space-vertical {
padding-top: 1px;
padding-bottom: 1px;
}

#views/index.html.erb

<%= space_vertical 3 %>

#helpers/application_helper.rb

def space_vertical(n)
Array.new(n).collect do ||
content_tag(:div, “”, :id => “space-vertical”)
end
end

¿ Es una buena práctica utilizar los helpers para este tipo de
propositos ?
¿ Tiene un impacto negativo en el rendimiento ?

Gracias por la ayuda

Hola,

En principio me parece correcto usar un helper para esto, pero… hay
unas cuantas cosas a comentar sobre tu método

def space_vertical(n)
Array.new(n).collect do ||
content_tag(:div, “”, :id => “space-vertical”)
end
end

Primero… para hacer un bucle no necesitas crearte un Array. Eso va a
instanciar objetos de forma innecesaria en memoria. Lo mismo se puede
aplicar a la cadena vacía que estás usando como parámetro de
content_tag, que puede sustituirse por un nil (probablemente, había que
ver si el helper lo admite).

Para poder recorrer un bucle como el que necesitas una opción puede ser
usar el método times. Por cierto, como el método times (3.times do…)
aparece en casi cualquier tutorial de ruby, aprovecho la ocasión para
recomendarte que te revises alguno.

Segundo, cuando usas un bloque, si no vas a usar variables de control,
no es necesario poner | | y dejarlo vacío. Es posible omitirlo
directamente.

Por último, es una mala práctica utilizar un “id” en html cuando
realmente no es un identificador único. El id de un elemento ha de ser
único en tu página. Si no es único, no es un identificador, sino una
clase. Deberías hacer tu CSS con eso en mente.

El método quedaría así

def space_vertical(n)
n.times do
content_tag(:div, nil, :class => “space-vertical”)
end
end

Saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find more about me on http://formatinternet.wordpress.com and
http://workingwithrails.com/person/5987-javier-ramirez

El día 9 de julio de 2008 16:37, javier ramirez [email protected]
escribió:

Hola,

En principio me parece correcto usar un helper para esto, pero… hay
unas cuantas cosas a comentar sobre tu método

Hola Javier !

Todo esto lo sospeche desde un principio !!!. Jeje. Muchas gracias por
la
clase de Ruby, y de paso la clase del buen diseño HTML, CSS. Excelente
Javier. Te agradezco.

Un saludo

2008/7/9 aprendiz basico [email protected]:

Javier,

Estoy adaptando el método ya que de la forma que me propusiste el bucle me
devuelve el valor de n. En unos momentos mando un email con la versión
final. Te comento que el helper si acepta el valor nil.

Hola aprendiz basico,

Al margen de las buenas recomendaciones de nuestro compañero Javier
Ramirez.
Puedes prescindir del bucle utilizando el operador “*” :

#helpers/application_helper.rb

def space_vertical(n)
content_tag(:div, nil, :class => “space-vertical”) * n
end

Un saludo.

Javier,

Estoy adaptando el método ya que de la forma que me propusiste el bucle
me
devuelve el valor de n. En unos momentos mando un email con la versión
final. Te comento que el helper si acepta el valor nil.

Un saludo

2008/7/9 Jaime Mora R. [email protected]:

Es impresionante cómo se simplificó esto. La lección aqui es que es muy
pero
muy importante tener en mente Ruby, una de las fortalezas de Rails.
Gracias
Javier, Jaime, son unos cracks !

Un saludo

On 7/10/08, Jaime Mora R. [email protected] wrote:

Hola aprendiz basico,

Al margen de las buenas recomendaciones de nuestro compañero Javier R…
Puedes prescindir del bucle utilizando el operador “*” :

#helpers/application_helper.rb

def space_vertical(n)
content_tag(:div, nil, :class => “space-vertical”) * n
end

Solo queria comentar que me parece mas legible la versión de Javier.
Está bien simplificar código, pero sin pasarse… que esto parece
Obfuscated Ruby ya…

:slight_smile:

Solo decir que la solución final es muy buena y una gran
simplificación del código presentado al principio, pero… ¿alguién se
ha parado a mirar lo que hace ese código?

Aprendiz básico lo utiliza para crear divs vacios con 1px de padding
arriba y abajo (2px de altos) y crear espacio vertical “a petición”.
¿No sería mejor decirle que esas cosas no se hacen, que solo guarrean
el código HTML y que tener un código Ruby limpio no sirve para nada si
tu HTML parece salido de FrontPage 98?

Solo una opinión.

Bai.

PD: Por cierto, no resuelvo el problema de HTML horrible porque me
faltaría saber en que puntos utiliza ese espacio vertical. Si por
ejemplo fuera una separación visual “especial” entre párrafos
utilizaría una regla horizontal hr, con el CSS adecuado para formar el
espacio requerido.

2008/7/10 Daniel R. Troitiño [email protected]:

Solo decir que la solución final es muy buena y una gran
simplificación del código presentado al principio, pero… ¿alguién se
ha parado a mirar lo que hace ese código?

Sí, y he empezado a contestar un par de veces diciendo lo mismo que
tú, pero al final lo he dejado en draft. Gracias por decirlo :wink:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

Aprendiz básico lo utiliza para crear divs vacios con 1px de padding
arriba y abajo (2px de altos) y crear espacio vertical “a petición”.

cierto… mea culpa… cuando veo mails con mucho código me voy
directamente a la parte que parece que tiene el problema… Hasta ahora
que lo has comentado no me había fijado en que lo único que hacía el
bloque CSS era meter espacio en blanco.

saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez

Hola gente, no se mucho ni de HTML ni de Ruby . Pero si me permitis mi
opinion, lo de que el aspecto del HTML no importa me parece que no esta
bien, ya que como minimo estas demostrando que en una de sus partes tu
aplicación no está del todo lo bien desarrollada que podría. Asi que mi
consejo Aprendiz, es que le hagas caso a Daniel (si el tiempo y los
jefes te
lo permiten) y le des una vuelta más a la forma de generar esos espacios
en
blanco, ya que si los generas por css estaras evitandole al servidor
trabajar con ese instructivo helper que habeis hecho en el hilo. Sera
poco,
pero algo es…:slight_smile:

Un saludo

Nota:
Feliz verano a todo el mundo

El día 10 de julio de 2008 17:08, aprendiz basico
[email protected]
escribió:

El día 10 de julio de 2008 4:38, Daniel R. Troitiño <
[email protected]> escribió:

Aprendiz básico lo utiliza para crear divs vacios con 1px de padding
arriba y abajo (2px de altos) y crear espacio vertical “a petición”.
¿No sería mejor decirle que esas cosas no se hacen, que solo guarrean
el código HTML y que tener un código Ruby limpio no sirve para nada si
tu HTML parece salido de FrontPage 98?

Hola Daniel,

Bueno, si se trata de opinar.

Desde una perspectiva de un simple desarrollador que primeramente busca
la
simplicidad y sencillez en la interfaz para el usuario (que en mi mente
primero está el), y que además sea lo más elegante posible el código del
servidor (vistas, helpers, etc.), concluyo que las respuestas de Javier
y
Jaime para mi son las más adecuadas. Para mi sirve mucho tener un código
Ruby limpio, y no me interesa tanto que el código HTML no satisfaga a
los
más puritanos. Te repito para mi primero es que la aplicación resultante
en
primer instancia sea eficaz, usable sin descuidar la eficiencia y me
tiene
sin cuidado que el HTML se parezca al FrontPage, ó a los programas más
odiados de Microsoft.

2008/7/10 aprendiz basico [email protected]:

Desde una perspectiva de un simple desarrollador que primeramente busca la
simplicidad y sencillez en la interfaz para el usuario (que en mi mente
primero está el), y que además sea lo más elegante posible el código del
servidor (vistas, helpers, etc.), concluyo que las respuestas de Javier y
Jaime para mi son las más adecuadas. Para mi sirve mucho tener un código
Ruby limpio, y no me interesa tanto que el código HTML no satisfaga a los
más puritanos. Te repito para mi primero es que la aplicación resultante en
primer instancia sea eficaz, usable sin descuidar la eficiencia y me tiene
sin cuidado que el HTML se parezca al FrontPage, ó a los programas más
odiados de Microsoft.

Qué atrevida es la ignorancia :slight_smile:

Eres muy libre de despreciar el buen consejo de Daniel (o de “concluir
que no es adecuado”), pero hazlo bajo tu cuenta y riesgo, es decir,
equivocándote.

Por otro lado, no acabo de entender qué razonamiento hace que te
obsesiones con un ruby limpio y en cambio que a la capa de cliente,
que al fin y al cabo es con lo que el usuario interactua
másdirectamente, la desprecies olímpicamente. Es como un restaurante
obsesionado con que la cocina funcione como un reloj, para acabar
sirviendo la comida en platos llenos de mugre. Difícil de imaginar.

Llevo mucho tiempo gestando un rant contra la generación que cree que
todo lo que se necesita para crear un sitio web está entre las tapas
del Agile. Algún día caerá :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o simplelogica.net
Recuerda comer mucha fruta y verdura.

2008/7/10 Manuel González Noriega [email protected]:

Llevo mucho tiempo gestando un rant contra la generación que cree que
todo lo que se necesita para crear un sitio web está entre las tapas
del Agile. Algún día caerá :slight_smile:

Es un gran cartel para la vuelta de Logicola =;-)


Sergio Gil Pérez de la Manga
e-mail > [email protected]
blog > http://www.lacoctelera.com/porras

El día 10 de julio de 2008 17:47, Sergio Gil Pérez de la Manga
[email protected]
escribió:> 2008/7/10 Manuel González Noriega [email protected]:

Llevo mucho tiempo gestando un rant contra la generación que cree que
todo lo que se necesita para crear un sitio web está entre las tapas
del Agile. Algún día caerá :slight_smile:

Es un gran cartel para la vuelta de Logicola =;-)

Amén! :smiley:

2008/7/10 Manuel González Noriega [email protected]:

Llevo mucho tiempo gestando un rant contra la generación que cree que
todo lo que se necesita para crear un sitio web está entre las tapas
del Agile. Algún día caerá :slight_smile:

Hay muchas cosas por las que yo haría un buen rant en el Agile o el
propio framework (eso de mezclar JavaScript, CSS y HTML en algunos
helpers de verdad que me mata, pero como es lo que dice David, y si no
“f*ck you”… pues todos callados).

Bai.