ROR 级联部门设计及应用

本文介绍了一种基于Ruby on Rails的应用中实现部门级联的方法。通过定义部门间的has_many和belongs_to关系,支持添加子部门及部门间的关联操作。同时提供了部门验证、增删查改等实例方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROR 级联部门设计
设计要点:has_many,belongs_to
支持添加子部门,欢迎大家前来拍砖!

使用方法:

@parent_depart.add_child(@child_depart)
@parent_depart.add_child(@child_depart2)
assert @child_depart.is_child?(@parent_depart)
assert @child_depart2.is_child?(@parent_depart)
assert @parent_depart.is_parent?(@child_depart)
assert @parent_depart.is_parent?(@child_depart2)



class User::Department < ActiveRecord::Base
#设置表名
set_table_name("user_"+self.table_name)


##
#设置表间关系
belongs_to :parent, :class_name => 'User::Department',
:foreign_key => 'parent_id' #父部门
has_many :subs, :class_name => 'User::Department',
:foreign_key =>'parent_id'
,:conditions=>["status=?",STATUS_NORMAL] #子部门
has_one :creator, :class_name => 'User::User' #部门创建人

##
#验证信息
validates_presence_of :name, :message => "部门名称不能为空!"
validates_presence_of :institution_id, :message => "绑定机构不能为空!"

##
#实例方法

#功能:添加子部门
def add_child(child)
child.parent_id = self.id
child.save!
end

#功能:删除子部门
#备注:删除子部门在最上层
def remove_child (child)
child.parent_id = 0
child.save!
end

#功能:删除部门
#流程:
# :1.判断是否有子部门 ,如果有不能删除
# : 2.更新部门状态-已删除
def delete!
if self.subs.blank?
self.status = STATUS_END
self.save!
else
raise "该部门包含子部门不能删除!"
end
end

#功能:判断是否为父节点
def is_child?(parent)
self.parent_id == parent.id
end

#功能:判断是否为子节点
def is_parent?(child)
child.parent_id == self.id
end

#功能:获得该部门用户
#返回:用户集合
def member()
User::User.find(:all, :conditions=>["department_id=?", self.id])
end

##
#类方法
class << self

#功能:顶级部门
#参数列表 :机构
#返回:最上层部门
def top_department(institution)
self.find(:all, :conditions=>["parent_id=0 and status=?
and institution_id=?", STATUS_NORMAL, institution.id])
end

end

end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值