我正在尝试为自动化创建混合任务一些脚手架,我想获得应用程序中具有模式和嵌入模式实现的所有模块名称的列表。最后,我想要一个包含字段定义的所有模式的列表,而不仅仅是模块名称。我们可以得到它,如果是,那么如何提供这样的api?
根据Ecto.Schema
的文档,
任何模式模块都将生成
__schema__
函数,该函数可用于模式的运行时内省。
您可以将它与Erlang和Elixir自己的内省工具一起使用,以过滤所有相关模块并巧妙地检索任何已定义模式的详细信息,例如:
{:ok, modules} = :application.get_key(:your_app, :modules)
modules
|> Enum.filter(&({:__schema__, 1} in &1.__info__(:functions)))
|> Enum.each(&(IO.inspect(&1.__schema__(:fields))))