在我的居民协会的Rails数据库中,我有User,Plot和House模型。 (空地块,有一个或多个房屋的地块,业主或租户居住的地方)。从数据库的角度来看,我需要各种关系,例如
从功能和用户界面的角度来看,我需要具有不同角色的会员模型 - PlotOwners,HouseOwners,租户,所有者亲属,租户的亲戚。我可以用现有的模型和关系来做到这一点。
问题:在显示说,居民时,我无法对用户或众议院中的任何一个进行排序,因为它们来自不同的表格。如果我创建一个包含来自User,Plot,House模型的列的成员模型,我将复制列,从而在数据库中存在风险不一致。
我有CS背景,但没有生产级数据库设计,Rails或其他。由于成员数据经常需要,只要我能在系统中强制执行完整性,复制这些列是否合理?除了在内存中排序数据之外还有其他选择吗?
我看到不同角色的成员作为报告,但他们需要持久保存,因为他们经常需要并因此重复查看,但用户/绘图/模型的基本模型没有管理员的重复似乎是方式。我的理解是否存在差距?
答案 0 :(得分:0)
我认为你可以用四种模式做到这一点。
您可以使用Polymorphic Association将您的用户与仅来自一个模型的地块和住宅相关联。以下是您需要的关联。
class User < ActiveRecord:Base
has_many :user_associations
has_many :plots, :through => :user_associations, :source => :associable, :source_type => 'Plot'
has_many :houses, :through => :user_associations, :source => :associable, :source_type => 'House'
end
class Plot < ActiveRecord:Base
has_many :houses
has_many :user_associations, :as => :associable
has_many :users, :through => :user_associations
end
class House < ActiveRecord:Base
belongs_to :plot
has_many :user_associations, :as => :associable
has_many :users, :through => :user_associations
end
class UserAssociation < ActiveRecord:Base
belongs_to :user
belongs_to :associable, :polymorphic => true
end