ekto | Cara mendapatkan semua modul skema di aplikasi

Saya mencoba membuat tugas campuran untuk mengotomatisasi beberapa perancah dan saya ingin mendapatkan daftar semua nama modul dalam aplikasi yang memiliki skema dan implementasi skema tertanam. Akhirnya saya ingin memiliki daftar semua skema dengan definisi bidang, bukan hanya nama modul. Bisakah kita mendapatkannya dan jika ya lalu bagaimana, apakah ecto menyediakan api seperti itu?


person AndreyKo    schedule 14.03.2019    source sumber


Jawaban (1)


Menurut dokumentasi Ecto.Schema,

Modul skema apa pun akan menghasilkan fungsi __schema__ yang dapat digunakan untuk introspeksi skema saat runtime.

Anda dapat menggunakan ini bersama dengan fasilitas introspeksi Erlang dan Elixir untuk memfilter semua modul yang relevan dan mengambil detail skema yang ditentukan dengan rapi, misalnya:

{:ok, modules} = :application.get_key(:your_app, :modules)

modules 
|> Enum.filter(&({:__schema__, 1} in &1.__info__(:functions))) 
|> Enum.each(&(IO.inspect(&1.__schema__(:fields))))
person Vadim Landa    schedule 14.03.2019
comment
Terima kasih, Vadim! Persis apa yang saya butuhkan. - person AndreyKo; 14.03.2019