Tengo un modelo llamado Feature
con una variable llamada body_string
, que contiene etiquetas HTML que me gustaría mostrar, en lugar de escapar.¿Hay alguna forma de definir el atributo de un modelo como siempre html_safe?
Cada vez que hago referencia a body_string
en mis vistas, necesito usar <%=raw
o .html_safe
. Esto parece redundante y no tan SECO.
¿Hay alguna manera de que pueda establecer una vez y para todos la variable body_string
como html_safe
?
Supongo que esto sucedería en el archivo app/models/feature.rb
, pero no puedo entender cuál sería exactamente la sintaxis correcta. Pensé en esto:
def body_string
return self.body_string.html_safe
end
Pero a Rails no le gusta; levanta una excepción stack level too deep
.
Naturalmente, podría definir una variable/método con un nombre diferente:
def safe_body_string
return self.body_string.html_safe
end
Y luego simplemente cambiar todas las referencias en los puntos de vista body_string
-safe_body_string
. Pero de alguna manera esto parece casi tan seco como simplemente usar raw
o .html_safe
en primer lugar.
¿Alguna idea de cómo manejar mejor esto? Siento que debe haber algo realmente elegante que no estoy viendo.
Probablemente deberías usar 'raw' cada vez que desees generar' body_string', independientemente de DRY (solo 3 caracteres). Hay una razón por la que se ve obligado a ser muy explícito cuando intenta generar un código HTML no codificado, y los desarrolladores esperan * ver * que usted sea explícito.Está moviendo efectivamente la lógica de visualización al modelo y está haciendo que sea mucho menos obvio para las personas que buscan sus vistas que el HTML sin procesar se envía al navegador. – meagar
Lamento tener solo un voto alternativo para dar al comentario de @ meagar – Simon