如何将ecto迁移到部分?

发布于 2025-01-21 12:16:56 字数 573 浏览 0 评论 0 原文

我使用相同的列名称名称地址, phone 等。

在我的迁移中,我想做一个部分,打电话给他们,而不是一遍又一遍地编写:

defmodule App.Repo.Migrations.CreateUsers do
  use Ecto.Migration

  def change do
    create table(:settings) do
      add :blah, :string
      App.Repo.Migrations.Common.stuff



defmodule App.Repo.Migrations.Common do

  def stuff do 
    add :name, :string
    add :address, :string
    add :phone, :string    

但是我会遇到一个错误(undefinedFunctionError)函数app.repo.migrations.common.stuff/0是不确定的

。在铁轨中,这是用 require_relative 完成的

I have many migration files using the same column names name, address, phone, etc.

In my migrations, I want to make a partial that calls them instead of writing it over and over:

defmodule App.Repo.Migrations.CreateUsers do
  use Ecto.Migration

  def change do
    create table(:settings) do
      add :blah, :string
      App.Repo.Migrations.Common.stuff



defmodule App.Repo.Migrations.Common do

  def stuff do 
    add :name, :string
    add :address, :string
    add :phone, :string    

But I get an error (UndefinedFunctionError) function App.Repo.Migrations.Common.stuff/0 is undefined.stuff

What's the proper way to split migrations? In Rails this was done with require_relative

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港巷口少年归 2025-01-28 12:16:56

我可以猜想您将文件 common.ex priv/repo/migration 内部放置,该不包括在编译时,

您需要2件事:

  1. 移动此文件 common.ex 内部 lib/,以进行编译和加载。
  2. 添加此行使用ecto.migration 上面的 def stuck do ,以定义要导入的 add()

I can guess you put the file common.ex inside priv/repo/migration which is not included while compilation

for this to work you need 2 things:

  1. move this file common.ex inside lib/, in order to be compiled and loaded.
  2. add this line use Ecto.Migration above def stuff do, for the definition of add() to be imported.
流云如水 2025-01-28 12:16:56

您可以定义一个函数,就像“ noreflow noreferrer”> 时间戳/1

def timestamps(opts \\ []) when is_list(opts) do
    opts = Keyword.merge(Runner.repo_config(:migration_timestamps, []), opts)
    opts = Keyword.put_new(opts, :null, false)

    {type, opts} = Keyword.pop(opts, :type, :naive_datetime)
    {inserted_at, opts} = Keyword.pop(opts, :inserted_at, :inserted_at)
    {updated_at, opts} = Keyword.pop(opts, :updated_at, :updated_at)

    if inserted_at != false, do: add(inserted_at, type, opts)
    if updated_at != false, do: add(updated_at, type, opts)
  end

You can define a function, just like timestamps/1 :

def timestamps(opts \\ []) when is_list(opts) do
    opts = Keyword.merge(Runner.repo_config(:migration_timestamps, []), opts)
    opts = Keyword.put_new(opts, :null, false)

    {type, opts} = Keyword.pop(opts, :type, :naive_datetime)
    {inserted_at, opts} = Keyword.pop(opts, :inserted_at, :inserted_at)
    {updated_at, opts} = Keyword.pop(opts, :updated_at, :updated_at)

    if inserted_at != false, do: add(inserted_at, type, opts)
    if updated_at != false, do: add(updated_at, type, opts)
  end

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文