2013-03-28 26 views
3

我有一個rails應用程序,其中包括使用gem acts-as-taggable-on標記博客帖子。我的想法是使用中等鏈接方法來擴展此gem的標記機制,我可以選擇創建一些用戶作爲標記所有者,並且可以選擇將一個標記鏈接到另一個作爲父/子的標記。如何在rails上使用acts-as-taggable-on標籤層次結構

目前,該系統具有獨立的標籤,如EducationChild EducationDistance Education

Education標籤所有者可以選擇選擇Child EducationDistance Education 作爲第一級子和它們鏈接在一起。在分類學家(A標籤管理員)批准之前,這種關係是不可見的。

同樣,最終用戶還可以建議Distance Education標記爲Education的子標記,並且此請求將對標記管理員可見。根據他的批准,這種關係將會建立起來。

這些都是我曾經屬於上述要求的幾個問題: -

  1. 是否建議延長創業板還是應該使用從頭開始編寫一個獨立的標籤模型來支持這種等級制度?

  2. 如果我繼續與寶石提供的架構,應該用什麼樣的模式來設計這樣的要求。具體來說,我應該使用帶有標籤ID和標籤名稱的parent_id列的單個表嗎?或者我應該在一個包含多對多關聯(tag_id,parent_tag_id(作爲外鍵))的單獨表格中維護他們的關係。

  3. 我也是新來的數據結構,所以我需要在算法的選擇標籤家庭之間有效地遍歷一些初始投入。使用鏈表是我的選擇,但考慮到Rails的慣例而不是配置,我真的不確定如何繼續這個。

回答

3

我記得做了一些像4年前一樣的東西ActsAsTree

有S還對如何手動here做到這一點的例子。

這兩個選項都需要標記表上的parent_id列,而且非常簡單。只需在模型文件夾中創建一個tag.rb並擴展Tag類。

Ps。它已經很長時間了,但我記得不得不檢查沒有循環,只要記住它

+0

謝謝Trompa。我認爲這個答案解決了我的大部分顧慮。 – ArkoD

+0

@Trompa - 沒有循環?這是什麼意思? – lcm

+0

通過parent_id創建的樹上循環。你可能會做類似A→B,B→C,C→A(C.parent_id = B,B,Parent_id = A,A.parent_id = C) – Trompa