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进行查看

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