tengo algo como:
<%= "<p class='...'>#{product.value}</p>".html_safe if product.value %> Entonces quiero mostrar el value envuelto en algún html si existe. El problema es que el value es un método que requiere algunos cálculos y la forma anterior para cada valor del producto se calcula dos veces, lo que duplica el tiempo de carga de mi página.
¿Alguna forma de optimizar esto?
Por razones de legibilidad, sería muy explícito:
<% if (calculated_value = product.value) %> <p class='...'><%= calculated_value %></p> <& end %>Creo que lo siguiente debería funcionar:
<%= product.value.then { |v| content_tag(:p, v, class: '...') if v } %> El método de value solo se llama una vez en el objeto del product . Después de eso, se pasa a un bloque then definirá cuál es el resultado de la expresión general. Sin volver a llamar al método de value , dentro del bloque determinamos cuál es el valor que debe devolverse (si corresponde).
Nota: La generación del objeto HTML se reemplazó por una invocación del método auxiliar content_tag .