ROR 级联部门设计及应用

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

你可能感兴趣的:(Rails,编程,Ruby,ActiveRecord)