Ecto |如何获取应用程序中的所有模式模块

问题描述 投票:2回答:1

我正在尝试为自动化创建混合任务一些脚手架,我想获得应用程序中具有模式和嵌入模式实现的所有模块名称的列表。最后,我想要一个包含字段定义的所有模式的列表,而不仅仅是模块名称。我们可以得到它,如果是,那么如何提供这样的api?

elixir phoenix-framework ecto
1个回答
3
投票

根据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))))
© www.soinside.com 2019 - 2024. All rights reserved.