Aiuto con la console Rails per modificare il modello di testo

Vorrei modificare direttamente in rails un modello di testo, ad esempio user_notifications.user_watching_first_post.text_body_template.

Qualcuno può aiutarmi a trovare i comandi della console rails per questo? Non sono esperto di rails e non sono riuscito a trovare l’oggetto che li contiene.

1 Mi Piace

(Non so come farlo al momento). Quale problema sta risolvendo? Perché non farlo dall’UX o dall’API?

1 Mi Piace

Correlato al suo altro argomento: 3.2.x still ignores some custom email templates.

Sembra che le modifiche ai template vengano ignorate.

Sei sicuro di aver modificato la lingua desiderata?

1 Mi Piace

Sì, anche se è più correlato a questo problema

La GUI per i modelli è molto difettosa, quindi vorrei risolverla in qualche modo

1 Mi Piace

Senza guardare attentamente il codice, sono sicuro al 99% che il problema sia dal lato Rails e non dal lato UX, quindi non penso che cambiarlo dal lato Rails risolverà qualcosa. Se hai un budget, posso aiutarti a capire come fare quello che chiedi, ma non prometto che risolverà il tuo problema.

Puoi trovare quelli che hai cambiato con qualcosa del genere:

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

E poi aggiornarli con qualcosa come

to=TranslationOverride.find(1)
to.value="Il mio nuovo valore per l'override"
to.save

Non prometto che questo funzionerà o non peggiorerà le cose. Ma nel peggiore dei casi dovresti essere in grado di annullare le tue modifiche dall’UX.

Non credo che il problema sia dal lato Rails, dato che l’interfaccia utente elenca erroneamente i tag consentiti (quindi quell’elenco è erroneamente codificato in modo fisso da qualche parte) ma %{base_url} viene analizzato correttamente altrimenti (vedi la discussione), cioè con Rails dovrei essere in grado di forzare il salvataggio del valore (aggirando eventuali controlli).

Ma tutto questo è fuori tema, in realtà: la mia domanda originale era solo per un suggerimento su quale oggetto Rails prendere di mira. Se puoi offrire solo aiuto a pagamento, aspetterò sperando che qualcun altro sia disposto a offrire un aiuto gratuito (l’ho fatto in altre discussioni, anche alcuni PR su GitHub). Nessun rancore :slight_smile:

Modifica: Hai modificato il tuo post mentre stavo scrivendo. Vedrò fin dove riesco ad arrivare con quello che hai suggerito (non sono sicuro di come adattarlo al mio esempio specifico ancora). TranslationOverride potrebbe essere un suggerimento sufficiente.

1 Mi Piace

È stato un indizio sufficiente e ho anche trovato il bug (che è nel codice ruby):

to=TranslationOverride.where(translation_key:"user_notifications.user_watching_category_or_tag.text_body_template").first
to.value="%{username} ha pubblicato 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 è il colpevole… base_url è valido e viene analizzato correttamente (come ho spiegato nel thread collegato). Sembra che io debba o modificare validations.rb (ugh!) o modificare direttamente il database SQL (che è quello che avevo dopo l’aggiornamento)… quindi ora devo trovare dove nel database postgre vivono questi tag di template :frowning:

p.s. È una correzione così facile e veloce per gli sviluppatori (potrei fare una PR ma conosco solo un sottoinsieme di tag dove %{base_url} manca dai tag validi)

1 Mi Piace

In realtà:

to.save(validate: false)

… ha funzionato bene.

Modifica: La GUI non lo mostra immediatamente (immagino sia la cache di sidekiq). Ho eseguito un ./launcher restart app per questo.

Per completezza:

to=TranslationOverride.where(translation_key:\"user_notifications.user_watching_category_or_tag.text_body_template\").first
to.value=\"%{username} ha pubblicato in \\\"[%{topic_title}](%{base_url}%{url})\\\"\\n\\n--\"
to.save(validate: false)
2 Mi Piace

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