Ecto |如何在应用程序中获取所有架构模块

时间:2019-03-14 09:45:49

标签: elixir phoenix-framework ecto

我正在尝试创建一个混合任务以自动化一些脚手架,并且我想获取应用程序中具有模式和嵌入式模式实现的所有模块名称的列表。最终,我希望列出所有具有字段定义的模式,而不仅仅是模块名称。 我们可以得到它吗?如果可以,那么ecto是否提供这种api?

1 个答案:

答案 0 :(得分: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))))