多级类别的利器awesome_nested_set
来源:互联网 发布:关系数据库的第三范式 编辑:程序博客网 时间:2024/06/03 19:43
应朋友的要求,从今天起,把用到的gem都写在blog上,即是给大家一个分享,也给自己一个记忆的地方。
原则就是,都是原创,可以少写,但是不帖大量自己没有搞懂的代码或者别人的观点。
今天用到了一个gem包叫做
awesome_nested_set
是一个专门处理多级Model嵌套的。使用二叉树算法,很精妙
用法
gem 'awesome_nested_set'
# gem 'awesome_nested_set', github: 'collectiveidea/awesome_nested_set' #on Rails 4
然后在你的Migration里面,要多级嵌套的地方写上
create_table :article_categories do |t| t.string :name t.integer :parent_id t.integer :lft t.integer :rgt t.integer :depth t.timestamps end然后在model里
acts_as_nested_set
OK了,一个多级嵌套的模型已经搭建完毕了,简单吧?怎么用呢?
Model(such as article_category
- (Object) ancestors #所有的父节点(包括祖父节点)- (Boolean) child? #是否是子节点?=有父节点- (Object) descendants #所有的子节点(包括孙子节点)- (Boolean) is_ancestor_of?(other) #是否是other的父辈- (Boolean) is_descendant_of?(other) #是否是other的子辈- (Boolean) is_or_is_ancestor_of?(other) #是否是other的父辈或自己- (Boolean) is_or_is_descendant_of?(other) #是否是other的子辈或自己- (Boolean) leaf? #是否是尾叶子节点?=没有子节点- (Object) leaves #列出所有的叶子节点- (Object) left #左边的兄弟编号(二叉树节点号,可不是id哟)- (Object) left_sibling #左边的兄弟- (Object) level #深度,0是root- (Object) move_left #挪到左边兄弟的左边- (Boolean) move_possible?(target) #能否挪到target的旁边(父子兄弟),如果是target的祖父就不可以- (Object) move_right #挪到右边兄弟的右边- (Object) move_to_child_of(node) #挪到node的子节点- (Object) move_to_child_with_index(node, index) #挪到node的子节点,并且排序为index- (Object) move_to_left_of(node) #挪到node的左边- (Object) move_to_ordered_child_of(parent, order_attribute, ascending = true) #挪到parent下,按照order_attribute进行升序(ascending=true)或者降序(ascending=false)排序- (Object) move_to_right_of(node) #挪到node的右边- (Object) move_to_root #使自己脱离成为根节点- (Object) parent #父节点
- (Object) right #右边的兄弟编号(同上)- (Object) right_sibling #右边的兄弟- (Object) root #返回所处的树的根节点- (Boolean) root? #是否是根节点=没有父节点- (Boolean) same_scope?(other) #这个不是很明白哦,以后搞懂再改- (Object) self_and_ancestors #自己和所有的父辈- (Object) self_and_descendants #自己和所有的子孙- (Object) self_and_siblings #自己和所有的兄弟- (Object) siblings #所有的兄弟- (Object) to_text #以文本形式列出树,方便debug
* 1 #<ArticleCategory:0x007fa6815e6e90> (, 1, 8)
** 2 #<ArticleCategory:0x007fa6815e6ad0> (1, 2, 7)*** 4 #<ArticleCategory:0x007fa6815e67b0> (2, 3, 4)*** 3 #<ArticleCategory:0x007fa6815e64b8> (2, 5, 6)
另外,可以加callbacks
只需要在acts_as_nested_set后面加上一些参数即可
acts_as_nested_set :before_add => :do_before_add_stuff, :after_add => :do_after_add_stuff, :before_remove => :do_before_remove_stuff, :after_remove => :do_after_remove_stuff好了,今天就到此吧,希望可以给大家帮助
- 多级类别的利器awesome_nested_set
- 多级分类gem: awesome_nested_set
- [php类]多级类别树的生成(无限级select,二级管理菜单,无限级meizz的树)
- 知识工作的类别
- html.target 的类别
- 支持的字段类别
- 关于女人的类别
- ArcSDE锁的类别
- 变量的存储类别
- 变量的存储类别
- 接口:类别的设计
- 变量的存储类别
- 变量的存储类别
- 神通的类别--转载
- Linux Shell的类别
- SAP的会计凭证类别
- 约束的类别
- 商品类别的标签
- AWS云端企业实战圣经:亚马逊如何构造云端计算 pdf电子书
- DFS专攻:POJ 1111
- HDU--杭电--2076--夹角有多大(题目已修改,注意读题)--水题
- Oracle EBS启用帮助诊断检查
- Java实现简单的socket通信
- 多级类别的利器awesome_nested_set
- linux快速部署samba共享服务器带验证
- sqlserver的字段char、varchar、text和nchar、nvarchar、ntext理解
- HDU--杭电--2181--哈密顿绕行世界问题--深搜
- Unity 利用NGUI2.6.3做技能冷却的CD效果
- AbstractQueuedSynchronizer的介绍和原理分析
- 【开发】怎么用一个DLL替换掉Code Behind文件
- lua语法入门
- C语言实现一个简单的线程池