2017-07-19 57 views
0

對於我正在開發的Rails項目,我有一個模型,它有一個圖像和一個優先級。所以它看起來是這樣的:Rails:自定義排序和模型優先級

card: 
    -id 
    -name 
    -img_url 
    -priority 

priority是一個數,其中1爲最高優先級(默認)和它繼續以2,3,等

我的問題是什麼是最好的如何將這些優先事項分配給創作?我是否應該在控制器中保留一個變量,以跟蹤已分配的優先級並指定下一個?同樣,這些優先級也會改變,即優先級3的卡變爲1,所以1必須變爲2,而2必須變爲3.

對此的最佳方式是什麼?

+0

這不僅僅是一個「位置」列,它與一個(jQuery)?可排序的用戶界面相鏈接,這將允許最終用戶按他的需要重新排列他的卡片? – MrYoshiji

+0

您可以使用自動遞增數據庫列。 – max

回答

0

你可以找到最後一個數字,然後添加並檢查

def create 
    @card = Card.new(params...) 
    @last_card = Card.last 
    priority = @last_card.priority 
    if priority == 3 
    next_priority = 1 
    else 
    next_priority = priority + 1 
    end 
    @card.priority = next_priority 
end 
0

我會建議優先管理操作到數據庫和數據庫觸發器是一個很好的解決方案。

首先設置唯一約束priority列以確保另一個線程不能插入相同的下一個優先級號碼。您可以使用max函數獲取下一個數字。

當優先級改變時,如果在rails中完成,則會逐個更改所有行的優先級,這將是資源密集型操作。