เอ็กโต้ | วิธีรับโมดูลสคีมาทั้งหมดในแอปพลิเคชัน

ฉันกำลังพยายามสร้างงานมิกซ์สำหรับระบบอัตโนมัติบางนั่งร้าน และฉันต้องการรับรายการชื่อโมดูลทั้งหมดในแอปพลิเคชันซึ่งมีการใช้งานสคีมาและสคีมาแบบฝัง ในที่สุดฉันต้องการรายการสคีมาทั้งหมดที่มีคำจำกัดความของฟิลด์ ไม่ใช่แค่ชื่อโมดูล เราจะได้มันมาหรือไม่ และถ้าใช่ ecto จะจัดเตรียม API ดังกล่าวได้อย่างไร


person AndreyKo    schedule 14.03.2019    source แหล่งที่มา


คำตอบ (1)


ตามเอกสารของ 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))))
person Vadim Landa    schedule 14.03.2019
comment
ขอบคุณ วาดิม! สิ่งที่ฉันต้องการ - person AndreyKo; 14.03.2019