簡體   English   中英

ROR /數據庫:如何為數據庫記錄創建自定義訂單列表?

[英]ROR / Database: How to create a custom order list for database records?

我有一個數據庫表和一些文章(對於一個網站),如下所示:

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

現在在網頁上我想使用order_id來訂購文章,這完全正常,使用ROR活動記錄。

但是,當我想更新order_id時,我必須使用這種技術更新所有記錄,每次更改order_id時。 這樣做的更好方法是什么?

謝謝

你想要acts_as_list

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

執行重新排序時無法更新大量記錄,但acts_as_list可以使用Article#move_to_topArticle#move_lower等方法為您完成所有這些Article#move_lower

有一些寶石可以解決你的問題。 Ruby Toolbox將它們放在Active Record Sortables類別中。 截至撰寫時間(2017年3月),此列表中的頂級寶石是:

act_as_list網站GitHub

這是管理數據庫中有序列表的最受歡迎的選擇,它在創建后10年仍然保留。 它會做你想要的,並管理項目的數量。 寶石將以正確的順序將您的位置字段編號保持為1到n。 但是,這意味着在列表中間插入項目意味着增加其下方列表項的所有位置值,這對您的數據庫來說可能非常有用。

排名模型GitHub

此gem還可以為您管理自定義排序列表。 然而,它在幕后使用另一種方法,其中列表項在整個整數值范圍內獲得大的位置數和間隔。 如果您有大型列表並且需要經常重新排序項目,這應該會為您帶來性能優勢。 在我看來,這個寶石可能不再被維護,因為作者現在在做Ember.js開發,它應該可以工作。 編輯: 它仍然保持

可排序的GitHub

這似乎與act_as_list相同,但能夠將您的項目放入多個列表中。 我不確定這是否是一個有效的用例,因為你可以創建多個項目。 它看起來好像很久沒有維護,也沒有被很多人使用過。

度假村GitHub

此gem使用鏈表方法,即每個數據庫條目都獲得指向下一個條目的指針。 如果您需要在列表中間插入大量插入內容,這可能是一個好主意,但對於獲取整個列表或者數據庫中出現問題以及鏈斷裂似乎是一個糟糕的想法。 這是一個新的,所以讓我們看看它是如何發展的。

acts_as_restful_listGitHub

這個寶石是“就像acts_as_list,但是很安靜”。 它似乎旨在獲得更好的API。 它背后的公司不再存在,所以我寧願使用act_as_list並處理它的API,這無論如何都不算​​太糟糕。

暫無
暫無

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

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