开发者

Ruby On Rails Hierarchical Relationship Modeling

I have a base table called users which holds all common information about a user such as name, address, phone number...etc

I have another table called clients which holds specific information about a client (such as the client's company name and their url) and inherits user information from the users table. A client has a foreign key user_id which maps back to the information about a user.

I have another table called client_admins which hold specific information about client_admins and also has a user_id field AND a client_id field (which links to the clients table).

I have another table called super_admins which links to the users table and has specific information about a Super admin.

I know I could probably get aw开发者_开发百科ay with Single Table Inheritance as there is not a lot of different data between each of the types, just different functionality and privileges.

What is the best way to model this in Rails 3?


Inside your user model:

has_one :client
has_one :client_admin
has_one :super_admin

Inside your client model:

belongs_to :user
has_one :client_admin

Inside your client_admin model:

belongs_to :user
belongs_to :client

Inside your super_admin model:

belongs_to :user


I am unsure of whether this is exactly what you were aiming for, but with my citier gem you could do this:

class User < ActiveRecord::Base
   acts_as_citier
   # User methods and validation, inherited by all children (so client & super admins)
   # Useful for things like validating user permissions etc
end

class Admin < User
   acts_as_citier
   # Admin specific methods and validation, inherited by all children
end

class Client < ActiveRecord::Base
end

class ClientAdmin < Admin
   acts_as_citier
   belongs_to :client
   # Client admin specific methods and validation
end

class SuperAdmin < Admin
   acts_as_citier
   # Super admin specific methods and validation
end

Allows each model to have unique fields so better than STI, but also shares methods and properties like normal inheritance.

Check it out - http://peterhamilton.github.com/citier/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜