rails acts_as_list

acts_as_list在一對多關係中,將多端按照作爲一個有順序的列表來存儲,並提供一些移動等方法來輔助

首先進行配置,在一的一端需要position字段,爲整形

belongs_to :admin,class_name: 'Admin'

 acts_as_list scope: :admin


多的一段

class Admin < ActiveRecord::Base
  has_many :users,-> { order("position DESC") },class_name:'User'

end

在rails4中需要寫成-> { order("position DESC") }這種格式,之前的格式被廢棄

配置完成後做一些測試

在添加時不需要通過from的形式去添加,但此時數據庫中的position字段是有值的,我們通過日誌可以看到,在添加用戶的時候,position的字段是根據admin_id來決定的。一個admin_id對應着從1到n的一個存儲序列。

添加的時候如果選擇一個admin_id,此時系統首先會去數據庫查詢該admin_id是否在用戶表中被其他記錄引用,如果有,查出引用該admin_id最大的position值,此時添加的記錄中position在最大的基礎上加1.如果該admin_id還沒出現在用戶表中,則該添加的用戶記錄中position的值爲1

修改的時候如果將admin_id的值做了改變,那麼數據庫中的position需要改變。該條記錄沒修改之前的admin_id對應的所有記錄的position的值都減少1.該條記錄對應的position值不變。修改後的admin_id中,以該條記錄的position爲基礎。大於等於該position 的值全部加1,小於的保持不變

對position的值也可以通過一些方法去修改,即改變記錄的位置

  • list_item.insert_at(2)
  • list_item.move_lower will do nothing if the item is the lowest item
  • list_item.move_higher will do nothing if the item is the highest item
  • list_item.move_to_bottom
  • list_item.move_to_top
  • list_item.remove_from_list
更多方法請點擊https://github.com/swanandp/acts_as_list進行查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章