Ayuda con la consola de Rails para editar la plantilla de texto

Me gustaría editar directamente en Rails una plantilla de texto, por ejemplo user_notifications.user_watching_first_post.text_body_template.

¿Alguien podría ayudarme a encontrar los comandos de la consola de Rails para esto? No soy experto en Rails y no pude encontrar el objeto que las contiene.

1 me gusta

(No sé cómo hacer eso de inmediato). ¿Qué problema está resolviendo? ¿Por qué no hacerlo desde la UX o la API?

1 me gusta

Relacionado con su otro tema: 3.2.x still ignores some custom email templates.

Parece que las modificaciones de plantilla se ignoran.

¿Está seguro de que está editando para el idioma deseado?

1 me gusta

Sí, aunque está más relacionado con este problema

La GUI para las plantillas es muy defectuosa, así que me gustaría resolverlo de alguna manera.

1 me gusta

Sin mirar detenidamente el código, estoy 99% seguro de que el problema está del lado de Rails y no del lado de UX, así que no creo que cambiarlo del lado de Rails vaya a solucionar nada. Si tienes presupuesto, puedo ayudarte a averiguar cómo hacer lo que pides, pero no prometo que vaya a resolver tu problema.

Puedes encontrar los que has cambiado con algo como esto:

TranslationOverride.all.pluck(:id, :translation_key)

Y luego actualizarlos con algo como

to=TranslationOverride.find(1)
to.value="Mi nuevo valor para la anulación"
to.save

No prometo que esto funcione o que no empeore las cosas. Pero en el peor de los casos, deberías poder deshacer tus cambios desde UX.

No creo que el problema sea del lado de Rails, ya que la interfaz de usuario enumera incorrectamente las etiquetas permitidas (por lo que esa lista está codificada incorrectamente en algún lugar), pero %{base_url} se analiza correctamente de lo contrario (ver el hilo), es decir, con Rails debería poder forzar el guardado del valor (omitiendo cualquier verificación).

Pero todo esto está fuera de tema, en realidad: mi pregunta original era solo para obtener una indicación sobre qué objeto de Rails apuntar. Si solo puede ofrecer ayuda pagada, esperaré esperando que alguien más esté dispuesto a ofrecer ayuda gratuita (lo hice en otros hilos, también algunos PR de GitHub). Sin resentimientos :slight_smile:

Edición: Editaste tu publicación mientras escribía. Veré hasta dónde llego con lo que sugeriste (aún no estoy seguro de cómo adaptarlo a mi ejemplo específico). TranslationOverride podría ser una pista suficiente.

1 me gusta

Fue suficiente como indicación, y también encontré el error (que está en el código ruby):

to=TranslationOverride.where(translation_key:"user_notifications.user_watching_category_or_tag.text_body_template").first
to.value="%{username} publicó en \"[%{topic_title}](%{base_url}%{url})\"\n\n--\"
to.save!
ActiveRecord::RecordInvalid: Validación fallida: La siguiente clave de interpolación no es válida: base_url
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/validations.rb:80:in `raise_validation_error'

validations.rb es el culpable… base_url es válido y se analiza correctamente (como expliqué en el hilo enlazado). Parece que necesito modificar validations.rb (¡uf!) o editar directamente la base de datos SQL (que es lo que tenía después de la actualización)… así que ahora necesito encontrar dónde viven estas etiquetas de plantilla en la base de datos de PostgreSQL :frowning:

p.d. Es una solución muy fácil y rápida para los desarrolladores (podría hacer un PR pero solo conozco un subconjunto de etiquetas donde %{base_url} falta en las etiquetas válidas)

1 me gusta

En realidad:

to.save(validate: false)

… funcionó bien.

Editar: La GUI no lo muestra inmediatamente (supongo que es el caché de sidekiq). Hice un ./launcher restart app para eso.

Para completar:

to=TranslationOverride.where(translation_key:\"user_notifications.user_watching_category_or_tag.text_body_template\").first
to.value=\"%{username} publicó en \\\"[%{topic_title}](%{base_url}%{url})\\\"\\n\\n--\"
to.save(validate: false)
2 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.