Aide avec la console Rails pour modifier le template de texte

J’aimerais modifier directement dans Rails un modèle de texte, par exemple user_notifications.user_watching_first_post.text_body_template.

Quelqu’un pourrait-il m’indiquer les commandes de la console Rails pour cela ? Je ne suis pas un expert de Rails et je n’ai pas trouvé l’objet qui les contient.

1 « J'aime »

(Je ne sais pas comment faire ça sur le moment). Quel problème cela résout-il ? Pourquoi ne pas le faire depuis l’UX ou l’API ?

1 « J'aime »

Lié à son autre sujet : 3.2.x still ignores some custom email templates.

Il semble que les modifications de modèles soient ignorées.

Êtes-vous sûr d’avoir modifié la langue souhaitée ?

1 « J'aime »

Oui, bien que ce soit plus lié à ce problème

L’interface graphique pour les modèles est très boguée, donc j’aimerais la résoudre d’une manière ou d’une autre

1 « J'aime »

Sans regarder attentivement le code, je suis sûr à 99 % que le problème se situe du côté de Rails et non du côté de l’UX, donc je ne pense pas que le modifier du côté de Rails résoudra quoi que ce soit. Si vous avez un budget, je peux vous aider à comprendre comment faire ce que vous demandez, mais je ne promets pas que cela résoudra votre problème.

Vous pouvez trouver ceux que vous avez modifiés avec quelque chose comme ceci :

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

Et ensuite les mettre à jour avec quelque chose comme

to=TranslationOverride.find(1)
to.value="Ma nouvelle valeur pour le remplacement"
to.save

Je ne promets pas que cela fonctionnera ou que cela n’aggravera pas les choses. Mais dans le pire des cas, vous devriez pouvoir annuler vos modifications depuis l’UX.

Je ne pense pas que le problème vienne de Rails, car l’interface utilisateur liste mal les balises autorisées (donc cette liste est mal codée en dur quelque part) mais %{base_url} est correctement analysé sinon (voir le fil de discussion), c’est-à-dire qu’avec Rails, je devrais pouvoir forcer la sauvegarde de la valeur (en contournant toutes les vérifications).

Mais tout cela est hors sujet, en réalité : ma question initiale portait juste sur un indice concernant l’objet Rails à cibler. Si vous ne pouvez proposer qu’une aide payante, j’attendrai en espérant que quelqu’un d’autre accepte de proposer une aide gratuite (j’ai fait cela dans d’autres fils de discussion, ainsi que quelques PR GitHub). Sans rancune :slight_smile:

Edit : Vous avez modifié votre message pendant que je tapais. Je vais voir jusqu’où je vais avec ce que vous avez suggéré (je ne suis pas encore sûr de comment adapter cela à mon exemple spécifique). TranslationOverride pourrait suffire comme indice.

1 « J'aime »

C’était suffisant comme indication, et j’ai aussi trouvé le bug (qui est dans le code ruby) :

to=TranslationOverride.where(translation_key:\"user_notifications.user_watching_category_or_tag.text_body_template\").first
to.value=\"%{username} posted in \\\"[%{topic_title}](%{base_url}%{url})\\\"\\n\\n--\"
to.save!
ActiveRecord::RecordInvalid: Validation failed: The following interpolation key is invalid: 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 est le coupable… base_url est valide, et est bien analysé sans problème (comme je l’ai expliqué dans le fil de discussion lié). Il semble que je doive soit pirater validations.rb (beurk !) soit modifier directement la base de données SQL (ce que j’avais après la mise à niveau)… je dois donc maintenant trouver où dans la base de données PostgreSQL ces balises de modèle résident :frowning:

p.s. C’est une correction tellement facile et rapide pour les développeurs (je pourrais faire une PR mais je ne connais qu’un sous-ensemble des balises où %{base_url} manque dans les balises valides)

1 « J'aime »

En fait :

to.save(validate: false)

… a très bien fonctionné.

Modification : L’interface graphique ne l’affiche pas immédiatement (je suppose que c’est la mise en cache de Sidekiq). J’ai fait un ./launcher restart app pour cela.

Pour information :

to=TranslationOverride.where(translation_key:\"user_notifications.user_watching_category_or_tag.text_body_template\").first
to.value=\"%{username} a posté dans \\\"[%{topic_title}](%{base_url}%{url})\\\"\\n\\n--\"
to.save(validate: false)
2 « J'aime »

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