ฉันกำลังพยายามสร้างงานมิกซ์สำหรับระบบอัตโนมัติบางนั่งร้าน และฉันต้องการรับรายการชื่อโมดูลทั้งหมดในแอปพลิเคชันซึ่งมีการใช้งานสคีมาและสคีมาแบบฝัง ในที่สุดฉันต้องการรายการสคีมาทั้งหมดที่มีคำจำกัดความของฟิลด์ ไม่ใช่แค่ชื่อโมดูล เราจะได้มันมาหรือไม่ และถ้าใช่ ecto จะจัดเตรียม API ดังกล่าวได้อย่างไร
เอ็กโต้ | วิธีรับโมดูลสคีมาทั้งหมดในแอปพลิเคชัน
คำตอบ (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
ขอบคุณ วาดิม! สิ่งที่ฉันต้องการ
- person AndreyKo; 14.03.2019