2012-07-04 78 views
5

經過大量的谷歌搜索之後,我現在將列出一個似乎不經常發生的問題,但仍然是非常基礎的。活動記錄中的鏈接列表。至於我現在,我們需要兩個協會的模式:Rails ActiveRecord模型鏈接列表

class Child < ActiveRecord::Base 
    belongs_to :parent 
    belongs_to :next, :class_name => 'Child', :foreign_key => 'next_id' 
    belongs_to :previous, :class_name => 'Child', :foreign_key => 'previous_id' 
end 

所以現在我們可以得到父母的所有兒童:

children = Child.where("parent_id = ?", parent_id) 

而現在的問題是:我當然要以一個查詢從數據庫中獲取所有的孩子,但我也想通過鏈接順序來查看孩子,這意味着第一個孩子的前一個屬性爲nil,下一個孩子將是連接的孩子按第一個下一個屬性,依此類推,直到下一個屬性爲零。 是否可以這樣做,還是需要查詢第一個孩子,然後從孩子到孩子沒有「預先」?

+0

孩子?兒童 – Maysam

回答

2

resortranked-model寶石是其他的選擇。 第一個使用類似於鏈接列表的方法。第二個使用位置屬性。

+0

最後,我們結束了使用排名模型 –

1

您應該使用Rails acts_as_list寶石。它將項目的位置存儲在列表中,甚至將範圍保存到父項目列表和belongs_to。它也可以解決這個問題,讓你查詢所有的元素,然後正確地排序它們。

+1

這個想法也跨越了我的想法,但acts_as_list並沒有給你一個鏈接列表的主要好處 - 從任意位置便宜的插入和刪除。 – Chowlett

+0

很高興知道寶石acts_as_list(因爲直到現在,我有這個實現自己完成),但正是這是我想離開....如果刪除一個對象,我只是想改變以前的屬性和下一個模型,而不是通過數百行更改位置屬性 –

+1

您可以覆蓋'destroy'方法並使其更新它的鄰居屬性。 – Draiken