Вам нужно определить свой макрос в другом модуле, require/import
, а затем вызвать его:
defmodule Storage.SchemaMacros do
defmacro hello do
quote do
field :hello
end
end
end
Теперь назовите его:
defmodule Storage.Repo.Category do
use Ecto.Schema
import Storage.SchemaMacros
schema "categories" do
field :name
field :path
field :color
field :desc
field :sequ, :integer
hello()
timestamps()
end
end
Обычно вы можете определять и вызывать макросы в одном и том же модуле (при условии, что он определен до его вызова), но способ работы собственного макроса schema/2
в Ecto не позволяет вам сделать это.