簡體   English   中英

Phoenix Ecto 模型嵌套

[英]Phoenix Ecto Model Nesting

所以我嘗試在phoenix中做一個內容系統,里面有課程、文件夾和課程,對象是一切的支柱,所以:

目的:

has_many :children, Content.Object
belongs_to :parent, Content.Object

課程

belongs_to :object, Content.Object

文件夾

belongs_to :object, Content.Object

不過這個方法有問題。 我似乎找不到從課程中獲取文件夾的方法。 我希望能夠做這樣的事情:

iex(1)> course = Content.get_course!(1)
iex(2)> [folderObj | _] = course.object.children
iex(3)> folder = folderObj.item

但顯然 item 字段不存在於對象上。 我將如何添加這個? (如果不清楚,我也可以添加更多代碼,只需評論)

經驗法則是:如果您發現自己將某個東西命名為“對象”,那么您就做錯了。

即使你提供的代碼是建立你所期望的, course.object.children將返回兩個課程和文件夾的集合,有沒有辦法抓住這個列表的頭部,並希望它會是一個文件夾(如你在第 2 行做。)另外,我們在 OOP 中沒有多態性,在沒有意義。 CourseCourse ,它不能也是“有點Object

所以你應該單獨構建一個對象樹。 為此,您的object模式看起來不錯,並且互聯網上充滿了如何構建樹的示例。

除了孩子,對象應該有很多課程,很多文件夾和很多課程 然后對course.object.folders的調用(假設所有內容course.object.folders正確預加載)將產生您想要的文件夾集合。

要訪問所有文件夾,包括屬於子級的文件夾,您需要實現遍歷樹子項的遞歸遍歷,適用的算法超出了此處的主題。

當然,可能還有許多其他方法可以實現類似的功能,但對於您分享的內容,這種方法似乎是最強大的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM