如何解决建立两个相关联接表之间关系的Rails方式,并同时强制执行数据完整性
让我在玩具模式中拥有以下这些实体:建筑物,公寓,租户,维护人员。
这是这些实体之间的联系方式:
- 建筑物有很多租户。
- 租户也可以通过“公寓”属于许多建筑物。
因此,从本质上讲,这是建筑物和租户之间通过公寓进行的多对多关系。
现在,我想在系统中添加MaintenancePerson。 MaintenancePerson可以与系统中的每个级别相关联。
- MaintenancePerson可以与许多建筑物关联。建筑物也可以有许多维护人员。
- MaintenancePerson可以与许多公寓关联。一个公寓还可以有许多维护人员。该公寓的维护人员应该是分配给该公寓所在建筑物的维护人员。
我可以使用以下表格:
Apartments
id
building_id
tenant_id
MaintenancePersonBuildingAssignments
id
maintenance_person_id
building_id
<attributes>
MaintenancePersonApartmentAssignments
id
maintenance_person_building_assignments_id
apartment_id
<attributes>
现在,在maintenance_person_apartment_assignments中,可以从maintenance_person_building_assignments_id和apartment_id两者推断出building_id。 此外,如果我使用maintenance_person_id而不是maintenance_person_building_assignments_id,则无法确保该建筑物的维护人员已经存在。
解决此问题的“铁路方式”是什么?
解决方法
听起来您将具有以下ActiveRecord类关系:
class Building < ApplicationRecord
has_many :apartments
has_many :tenants,through: :apartments
end
class Apartment < ApplicationRecord
belongs_to :building
belongs_to :tenant
has_and_belongs_to_many :maintenance_persons
end
class Tenant < ApplicationRecord
has_many :apartments
end
class MaintenancePerson < ApplicationRecord
has_and_belongs_to_many :apartments
end
为了支持has_and_belongs_to_many
和Apartment
之间的MaintenancePerson
关系,将存在一个带有apartments_maintenance_persons
和apartment_id
列的名为maintenance_person_id
的连接表。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。