2008-09-25 17 views
8

He oído que es mejor no tener ningún html en tus ayudantes; mi pregunta es, ¿por qué no? Y, además, si intenta generar una lista html o algo así, ¿cómo puedo evitar las etiquetas reales?¿Por qué los ayudantes no tienen html en ellos?

Gracias!

-fREW

+0

* suspiro *. Lo he hecho mucho en realidad. Siempre es una buena idea separar la lógica de presentación, pero tengo prisa, he integrado etiquetas HTML en los controles de mi servidor y las clases de ayuda y en otros lugares no ha sido apropiado. Soy una mala persona :( – stephenbayer

Respuesta

15

Mi consejo: si se trata de pequeños fragmentos de HTML (un par de etiquetas) no se preocupe. Más que eso, piense en parciales (como tirar cadenas de html juntos en un ayudante es un dolor en el que las vistas son buenas).

Normalmente incluyo HTML en mis ayudantes (ya sea directamente o mediante llamadas a métodos Rails como link_to). Mi mundo no se ha derrumbado a mi alrededor. De hecho, hasta el punto de decir que mi código es muy limpio, fácil de mantener y comprensible debido a eso.

Anoche escribí una ayuda de link_to_user para arrojar html con un enlace normal al usuario junto con el ícono del usuario al lado. Pude haberlo hecho de forma parcial, pero creo que link_to_user es una forma mucho más limpia de manejarlo.

2

Ésta no es una respuesta completa a su pregunta, pero se pueden crear html en sus etiquetas mediante el método content_tag. Mi suposición de por qué sería la limpieza del código.

Además, content_tag le permite anidar etiquetas en bloques. Mira esto blog post on content_tag.

+0

Bien , Puedo hacer eso, pero realmente es lo mismo, sigue siendo un código de vista muy específico. –

+0

Tiene el mismo resultado, pero es "más limpio". Es un argumento similar que ocurre en el mundo de la aplicación web Java con taglibs vs <% %> expresiones. Al final depende de lo que usted y su equipo decidan como la "manera correcta". – Sixty4Bit

0

Como se mencionó anteriormente, generalmente se piensa que los ayudantes se usan como lógica de negocios, para hacer algo que maneja código de vista, pero no es código de vista en sí mismo. El lugar más convencional para poner cosas que generan códigos de código de vista es parcial. Los parciales pueden llamar a un ayudante si es necesario, pero por el bien de mantener las cosas separadas, lo mejor es mantener el negocio en el ayudante y ver en el parcial.

Además, tenga en cuenta que esto es todo lo convencional, no las reglas duras y rápidas. Si hay una buena razón para romper la convención, haz lo que funcione mejor.

+1

No creo que esté de acuerdo con que los ayudantes sean para la lógica de negocios. Cualquier tipo de ayuda que se vea relacionada es mucho más acerca de la lógica de visualización que la lógica de negocios. Creo que la lógica de negocio principal de cualquier aplicación debería almacenarse en la capa del modelo, quizás con algunos en la capa de controlador –

+0

Es cierto que '' lógica de negocios 'significa definitivamente no en th e capa de presentación. Pero lo encuentro en mis controladores, no en los modelos ... ¿Es por eso que todas mis aplicaciones están rotas? lol –

5

No veo que haya nada de malo en ello. La mayoría de los ayudantes de rieles generan código HTML (que es su propósito) - para mí esto implica que es lo que se supone que debes hacer tú mismo.

Sin embargo, existe la omnipresente cuestión de la legibilidad del código. Si tiene un ayudante que solo crea una gran cadena de HTML sin formato, será difícil de entender. A pesar de que está bien para generar HTML en ayudantes, debe hacerlo usando cosas como content_tag y render :partial en lugar de sólo return %Q(<a href="#{something}">#{text}>)

1

En Los Carriles 3 Puede utilizar método * html_safe * cadena para hacer que sus métodos auxiliares vuelven etiquetas HTML que no se escapará

-1

Pongo html en parciales por lo general.

Piensa en la semántica. Si coloca html en una cadena, pierde el aspecto semántico: se convierte en una cadena en lugar de marcado. Muy diferente. Por ejemplo, no puede validar una cadena, pero puede validar el marcado.

La razón por la que quiero poner html en un ayudante en lugar de parcial (y cómo encontré este hilo) es concisión. Me gustaría poder escribir =hr en lugar de =render 'hr'.

Para responder a la pregunta que no pedí ;-): a HTML no-de escape en un ayudante, prueba este

def hr 
    raw '<hr />' 
end 
Cuestiones relacionadas