2012-09-07 52 views
1

我有一些製品(網站)像這樣一個數據庫表:ROR /數據庫:如何爲數據庫記錄創建自定義訂單列表?

Articles: 
id  title   order_id 
1   -   1 
2   -   4 
3   -   3 
4   -   2 

現在開始我想用ORDER_ID訂購物品的網頁,這個工作完全正常,使用ROR的活動記錄。

但是,當我想更新order_id時,我將不得不使用這種技術更新所有記錄,每次對order_id進行更改。什麼是更好的方式來做到這一點?

感謝

回答

3

你想acts_as_list

class Article < ActiveRecord::Base 
    acts_as_list :column => 'order_id' 
end 

有各地在執行重新排序更新大量記錄沒辦法,但acts_as_list可以做的一切,爲你喜歡Article#move_to_topArticle#move_lower方法。

+0

很棒的聲音:) – jakobk

+0

這裏是[GitHub-acts-as_list的存儲庫](https://github.com/swanandp/acts_as_list)。 – amoebe

0

有一些寶石來解決你的問題。 Ruby工具箱的類別爲Active Record Sortables。至於寫作(2017年3月)的時間在這個名單上面的寶石是:

act_as_listWebsiteGitHub

這是數據庫管理的有序列表中最流行的選擇,它是在其創立之後仍保持10年。它會做你想要的,並管理項目的數量。寶石將以正確的順序將您的位置字段編號從1到n。然而,這意味着在列表中間插入項目意味着增加其下的列表項的所有位置值,這對於您的數據庫來說可能相當有用。

排名模型GitHub

這種寶石也管理自定義有序列表你。然而,它在幕後使用了另一種方法,其中您的列表項獲取的位置數字很大,並且在整個整數值範圍內分隔開。如果您的列表很大,並且需要經常重新排序項目,這應該會爲您帶來性能方面的好處。在我看來,這個寶石可能不再保持,因爲作者現在正在開發Ember.js,它應該工作。 編輯:It is still maintained

排序GitHub

這似乎是同樣喜歡act_as_list而是把你的項目分成多個列表的功能。我不確定這是否是有效的用例,因爲您可以創建多個項目。它看起來很長時間沒有維護,也沒有被很多人使用。

度假GitHub

這種寶石使用鏈表的方式,即每個數據庫條目獲得一個指向下一個條目。這可能是一個好主意,如果您需要在列表中間插入大量插入內容,但對於獲取entires列表或者數據庫中出現問題並斷鏈,這似乎是一個可怕的想法。這是非常新的,所以讓我們看看它是如何發展的。

acts_as_restful_listGitHub

這種寶石 「就像acts_as_list,但寧靜」。它似乎瞄準一個更好的API。它背後的公司已經不存在了,所以我寧願使用act_as_list並處理它的API,反正它也不算太壞。