Как в Rails я могу легко сбросить все записи до значений атрибутов по умолчанию, объявленных в файлах модели? - PullRequest
1 голос
/ 11 июля 2020

У меня есть несколько таблиц, в которых используется однотабличное наследование, и значительное количество файлов моделей для каждой таблицы. Каждый файл модели имеет набор атрибутов по умолчанию, например:

class SpecialWidget < Widget
  attribute :name, :string, default: "A Thing"
  attribute :description, :text, default: "This is an awfully special widget."
end

Это полезно, потому что в моем случае name и description не могут быть изменены конечными пользователями, поэтому это хороший способ для мне установить значения, которые я все еще могу изменить, если мне нужно. Теперь я могу просто делать SpecialWidget.create все, что хочу, а созданный SpecialWidget будет иметь эти значения по умолчанию name и description.

Теперь, что я хочу сделать, это обновить name или description одного или нескольких типов Widget, изменив значение в файле модели, например:

class SpecialWidget < Widget
  attribute :name, :string, default: "A Thing"
  attribute :description, :text, default: "This is a new description for this widget."
end

... и затем запустив какой-то команды через скрипт или консоль Rails для сброса всех Widget name и description в базе данных до значений по умолчанию. Он не должен сбрасывать значения, для которых я не объявил значения по умолчанию.

Это должно быть выполнено с помощью объявления по умолчанию в коде, а не путем установки значений по умолчанию в схеме базы данных, так как я использую STI, и каждая модель будет иметь разные name и description.

1 Ответ

3 голосов
/ 11 июля 2020

Похоже, вы ищете какой-нибудь магический c способ сделать это, хотя на самом деле это можно сделать, просто если вы согласитесь с тем, что простое решение подходит.

Например, это будет для одной из моделей SpecialWallet:

new_default_desc = "This is a new description for this widget."
Wallet.where.not(
  description: new_default_desc
).update_all(
  description: new_default_desc
)

Вы должны повторить этот процесс для других моделей и столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...