У меня есть таблица, которая содержит типы заданий, которые можно создать, а также миграцию и схему для них, однако я хотел бы вставить данные по умолчанию в таблицу при миграции/создании.
В настоящее время я прибегаю к тому, чтобы просто добавить данные самостоятельно и надеюсь, что я случайно не откатился слишком далеко, но мне нужно более надежное решение для этого.





Они называются «семена».
В своем mix.exs создайте такой псевдоним:
defp aliases do
[
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
Теперь просто создайте этот файл priv/repo/seeds.exs и поместите в него что-то вроде этого:
case Mix.env() do
:dev ->
IO.puts("Let's add some data!")
{:ok, job_0} = YourModule.create_job(%{name: "job_0"})
{:ok, job_1} = YourModule.create_job(%{name: "job_1"})
_ ->
nil
end
Обратите внимание, что я стараюсь запускать «сиды» только в среде :dev.
Со всей этой настройкой вы можете просто mix ecto.drop удалить текущую базу данных, а затем mix ecto.setup создать новую базу данных, запустить миграцию и заполнить начальными данными.
То, что я написал, является чисто иллюстративным. Вы можете создать любой псевдоним и семенной скрипт, какой захотите.
«Работа» была здесь просто примером, вы вызываете функции из своих контекстов, например, например. Account.User.create_user(attrs).
Спасибо! Что касается «работ», как мне добавить запись в таблицу? Есть ли где-нибудь указать, что делают рабочие места? Я искал документацию, но не смог найти ее в документах Ecto "^^