使用 Rails 控制台编辑文本模板的帮助

我想直接在 Rails 中编辑一个文本模板,例如 user_notifications.user_watching_first_post.text_body_template

有人能帮我指出用于此目的的 Rails 控制台命令吗?我不太懂 Rails,也找不到保存这些模板的对象。

1 个赞

(我一时不知道该怎么做)。它解决了什么问题?为什么不从用户体验或 API 来做?

1 个赞

与其另一个主题相关:https://meta.discourse.org/t/3-2-x-still-ignores-some-custom-email-templates/308203。

似乎模板修改被忽略了。

您确定您编辑的是目标语言吗?

1 个赞

是的,尽管这与此问题更相关。

模板的GUI非常不稳定,所以我想以某种方式解决它。

1 个赞

不仔细看代码,我99%确定问题出在Rails端,而不是UX端,所以我认为在Rails端进行更改不太可能解决任何问题。如果你有预算,我可以帮你弄清楚如何实现你的要求,但不能保证能解决你的问题。

你可以用类似这样的方法找到你已更改的内容:

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

然后用类似这样的方法更新它们:

to=TranslationOverride.find(1)
to.value="My new value for the override"
to.save

我不保证这会奏效或不会让情况变得更糟。但最坏的情况下,你应该能够撤销你在UX中的更改。

我认为问题不在于 Rails 方面,因为 UI 错误地列出了允许的标签(因此该列表在某处被错误地硬编码了),但 %{base_url} 否则会被正确解析(请参阅线程),也就是说,使用 Rails 我应该能够强制保存值(绕过任何检查)。

但这都离题了:我最初的问题只是想知道要针对哪个 Rails 对象。如果您只能提供付费帮助,那么我将等待,希望其他人愿意提供一些免费帮助(我在其他帖子中也这样做过,也提交了一些 GitHub PR)。没有恶意 :slight_smile:

*编辑:*您在我打字时编辑了您的帖子。我将看看您建议的方法能让我走多远(还不确定如何将其应用于我的具体示例)。TranslationOverride 可能足以提供一个方向。

1 个赞

这足以作为提示,而且我还找到了 bug(在 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 是罪魁祸首……base_url 是有效的,并且确实可以正常解析(正如我在链接的帖子中解释的那样)。看来我需要修改 validations.rb(哎!)或者直接编辑 SQL 数据库(这是我升级后所做的)……所以现在我需要找到 postgre 数据库中这些模板标签的位置 :frowning:

附注:这对开发者来说是一个非常简单快捷的修复(我可以做一个 PR,但我只知道一部分标签缺少 %{base_url} 并且不在有效标签列表中)

1 个赞

实际上:

to.save(validate: false)

……确实可以正常工作。

编辑:GUI 并没有立即显示(我猜是 sidekiq 缓存)。我通过运行 ./launcher restart app 来解决这个问题。

为了完整起见:

to=TranslationOverride.where(translation_key:\"user_notifications.user_watching_category_or_tag.text_body_template\").first
to.value=\"%{username} 在 \\\"[%{topic_title}](%{base_url}%{url})\\\" 中发帖\\n\\n--\"
to.save(validate: false)
2 个赞

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