2012-07-26 83 views
1

我正在为一个应用程序设计数据模型,其中我有不同类型的用户,如学生,员工,家长等。让我们说他们每个人都被称为人。 我对这些包含实体特定信息的实体都有单独的表。我有一个包含像我已经建立了两列的帮助下对 用户表用户和其他人之间的关系LOGIN_ID,密码等 用户特定信息的用户表: 1.为person_id整数 2. person_type整数用户和人员协会

下面是类定义:

class User < ActiveRecord :: Base 
    belongs_to :person, :polymorphic =>true, :dependent => :destory 
end 

class Student < ActiveRecord :: Base 
    has_one :user, :as => :person 
end 

class Parent < ActiveRecord :: Base 
    has_one :user, :as => :person 
end 

class Employee < ActiveRecord :: Base 
    has_one :user, :as => :person 
end 

我想这种设计您的宝贵意见。它是好的还是需要做任何改变?

+0

上述设计的问题是,如果我销毁学生,关联的用户不会自动销毁。有没有办法可以指定如果一个人(学生或雇员或父母)被销毁,那么相应的应该被自动销毁? – Venkat 2012-07-26 09:56:48

+0

看'依赖'选项'has_one'。 http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one – 2012-07-26 10:13:28

+0

谢谢Denis!你的建议奏效了。当我在Person(学生或员工或家长)上设置:dependent =>:destroy并在Person上调用destory方法时,相应的用户记录将自动删除。 – Venkat 2012-07-30 12:32:38

回答

0

这一切都归结于您的应用程序的业务逻辑。从我迄今为止的理解。我会保持简单,并有一个名为User的模型/表格,并有一列category,它们区分用户的类型。

否则,你也可以有布尔列:student,parent,employee。然后你可以做这样的事情:

If @user.student 
    ... do something here 
elsif @user.parent 
    ... etc etc