Manera adecuada de renderizar condicionalmente texto en una plantilla: o valor modificado dos veces en una sola renderización

Tengo un plugin que (casi) crea Droplets de Digital Ocean e instala Discourse.

Tengo una página con una plantilla que renderiza información sobre el modelo de Rails, el droplet que crea y la instancia de Discourse que se instala en ese droplet. Tengo toda la información necesaria fluyendo entre Rails y Ember a través de MessageBus. Quiero mostrar diferentes contenidos dependiendo de si:

  • hay suficiente información para crear el droplet
  • la tarea que crea el droplet está en ejecución (actualiza datos en el modelo)
  • Discourse se ha instalado

Sigo obteniendo el siguiente error:

   Has modificado "hasStatus" dos veces en <@ember/component:ember660> en una sola renderización.

EDITO: Bueno, eso fue porque tenía dos funciones computed observando lo mismo…

Creo que finalmente he entendido que no puedo hacer esto usando algo como {{#if hasStatus}} (que es una función calculada) en la plantilla, ya que la página necesitará volver a renderizarse para mostrar el estado después de que el usuario haga clic en el botón “crear droplet” (ya que entonces establecerá la variable installation_status, que muestra lo que está ocurriendo durante la instalación).

¿O tal vez tengo algún otro error que está desencadenando esto y lo que estoy haciendo debería funcionar?

Así que supongo que lo que necesito hacer es usar <gasp> CSS para ocultar los diversos elementos.

Bueno, como suele ocurrir cuando publico cosas como esta, la respuesta es aún más extraña de lo que podría haber imaginado.

Si uso cosas como {{#if server.value}} y value es enviado por el MessageBus, funciona como se espera si realizo una actualización desde la consola de Rails. Puedo establecerlo en nil/no nil y la sección de la página aparece/desaparece según lo previsto. Cuando ejecuto mi tarea de Ansible desde una terminal, Ansible envía un nuevo valor a través de una ruta, lo que actualiza el registro, lo que a su vez lo envía al bus de mensajes, y la sección de la plantilla aparece como se espera.

Pero, si Ansible se ejecuta mediante un trabajo de Discourse, todavía veo que Rails afirma estar enviando los datos al bus de mensajes. Y en la consola de JavaScript del navegador, veo que una función calculada que rastrea ese valor se está ejecutando y el valor es nulo. Si recargo el navegador, los datos están presentes y la página se renderiza como se espera. Quizás esto sea alguna peculiaridad del entorno de desarrollo y será diferente en producción.

¿Quizás esto esté relacionado?

Bueno, todavía estoy preocupado por ese error, pero agregué

         window.location.reload(true);

a mi acción, la página se recarga y todo parece funcionar después de eso.