# Помощь с Rails console для редактирования текстового шаблона

**URL:** https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691
**Category:** Self-hosting
**Tags:** rails-console
**Created:** [20.Май.2024 12:52:10 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691 "2024-05-20T12:52:10Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![nordize](https://avatars.discourse-cdn.com/v4/letter/n/c68b51/32.png) [@nordize](https://meta.discourse.org/u/nordize)
#### Post date: [20.Май.2024 12:52:10 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/1 "2024-05-20T12:52:10Z")

</div>

Я хотел бы отредактировать текстовый шаблон напрямую в Rails, например, `user_notifications.user_watching_first_post.text_body_template`.

Не могли бы вы подсказать команды для консоли Rails, чтобы это сделать? Я не очень хорошо разбираюсь в Rails и не могу найти объект, который хранит эти данные.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [20.Май.2024 13:00:49 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/2 "2024-05-20T13:00:49Z")

</div>

Я не знаю, как это сделать прямо сейчас. Какую проблему это решает? Почему бы не сделать это через UX или API?

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [20.Май.2024 13:05:20 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/3 "2024-05-20T13:05:20Z")

</div>

Связано с его другой темой: [3.2.x still ignores some custom email templates](https://meta.discourse.org/t/3-2-x-still-ignores-some-custom-email-templates/308203).

Похоже, что изменения шаблонов игнорируются.

Вы уверены, что редактируете нужный язык?

---

<div class="post-metadata">

### Author: ![nordize](https://avatars.discourse-cdn.com/v4/letter/n/c68b51/32.png) [@nordize](https://meta.discourse.org/u/nordize)
#### Post date: [20.Май.2024 13:42:30 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/4 "2024-05-20T13:42:30Z")

</div>

Да, хотя это больше связано с [этой проблемой](https://meta.discourse.org/t/email-notification-template-gui-complains-about-base-url/279395/11).

Графический интерфейс для шаблонов работает очень нестабильно, поэтому я хотел бы как-то решить эту проблему.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [20.Май.2024 13:53:37 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/5 "2024-05-20T13:53:37Z")

</div>

Не вглядываясь внимательно в код, я на 99% уверен, что проблема на стороне Rails, а не UX, поэтому я не думаю, что изменение чего-либо на стороне Rails исправит ситуацию. Если у вас есть бюджет, я могу помочь разобраться, как реализовать то, что вы просите, но не обещаю, что это решит вашу проблему.

Вы можете найти те, которые вы изменили, используя что-то вроде этого:

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

```

А затем обновить их с помощью чего-то вроде

```plaintext
to=TranslationOverride.find(1)
to.value="Мое новое значение для переопределения"
to.save

```

Я не обещаю, что это сработает или не ухудшит положение. Но в худшем случае вы сможете отменить свои изменения на стороне UX.

---

<div class="post-metadata">

### Author: ![nordize](https://avatars.discourse-cdn.com/v4/letter/n/c68b51/32.png) [@nordize](https://meta.discourse.org/u/nordize)
#### Post date: [20.Май.2024 14:00:53 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/6 "2024-05-20T14:00:53Z")

</div>

Я не думаю, что проблема на стороне Rails, поскольку UI ошибочно отображает список разрешённых тегов (значит, этот список где-то неправильно захардкожен), но %{base\_url} при этом парсится корректно (см. ветку). То есть с Rails я должен иметь возможность принудительно сохранить значение (обойдя любые проверки).

Но всё это, честно говоря, оффтоп: мой первоначальный вопрос был просто о подсказке, какой объект Rails нужно таргетировать. Если вы можете предложить только платную помощь, я подожду, надеясь, что кто-то другой захочет помочь бесплатно (я уже делал так в других ветках, также есть несколько PR на GitHub). Никаких обид 🙂

_Редактирование:_ Вы отредактировали свой пост, пока я печатал. Я посмотрю, насколько далеко смогу продвинуться с тем, что вы предложили (пока не уверен, как адаптировать это для моего конкретного примера). Возможно, TranslationOverride будет достаточно в качестве подсказки.

---

<div class="post-metadata">

### Author: ![nordize](https://avatars.discourse-cdn.com/v4/letter/n/c68b51/32.png) [@nordize](https://meta.discourse.org/u/nordize)
#### Post date: [20.Май.2024 14:24:34 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/7 "2024-05-20T14:24:34Z")

</div>

> [@nordize](#):
>
> TranslationOverride может служить достаточным указанием.

Это было достаточно, и я также нашел ошибку (она находится в коде Ruby):

```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-базу данных (что я делал после обновления)… теперь мне нужно найти, где в базе данных PostgreSQL хранятся эти теги шаблонов ☹

p.s. Для разработчиков это, конечно, очень простое и быстрое исправление (я мог бы отправить PR, но знаю лишь подмножество тегов, где `%{base_url}` отсутствует в списке допустимых).

---

<div class="post-metadata">

### Author: ![nordize](https://avatars.discourse-cdn.com/v4/letter/n/c68b51/32.png) [@nordize](https://meta.discourse.org/u/nordize)
#### Post date: [30.Май.2024 02:08:19 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/8 "2024-05-30T02:08:19Z")

</div>

На самом деле:

```ruby
to.save(validate: false)

```

… сработало отлично.

Редактирование: GUI не показывает это сразу (полагаю, кэширование Sidekiq). Я выполнил `./launcher restart app` для этого.

Для полноты картины:

```ruby
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)

```

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [29.Июнь.2024 02:08:55 UTC](https://meta.discourse.org/t/help-with-rails-console-to-edit-text-template/308691/9 "2024-06-29T02:08:55Z")

</div>

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