【发布时间】:2013-01-17 15:50:33
【问题描述】:
如果这个问题已经得到解答,但我已经搜索了很多,仍然需要一些澄清,请原谅我。
我正在使用 Rails 3.2 构建一个物业管理工具。我已经有一个用户模型和授权/身份验证代码,并具有完整的测试覆盖率。
我刚刚开始绘制模型/类/表,有点困惑。
让我们从用户开始。
建模用户
我计划允许多家公司使用此系统。每个人都会有员工(用户)。这些用户将具有不同的角色,例如经理、代理、会计师、秘书等。在大多数情况下,我计划为这些用户中的每一个存储的数据将是相似的(或者我目前认为)所以我倾向于单表继承并使用类型来定义每个员工的访问级别。
其次,我打算让房东和租客也登录系统。登录后,他们将能够查看有关他们拥有或租用的房产的信息 - 可能还会更新他们的联系方式。
我正在考虑使用多态关联来表示这些用户。
所以我目前的计划是,希望得到一些反馈
用户 <:base>
Employee 楼主
租户
这是解决这个问题的最佳方法还是我在自取其辱? 有人建议我应该有一个“角色”表并为用户分配角色 - 但我觉得这不是 Rails 中最优雅的方式。 我的下一个问题是属性。现在我有一个属性模型,当我添加它们时,它们属于用户(即它们有一个 user_id 外键)。然后我开始思考“如果添加属性的员工(用户)离开公司或出于某种原因删除了他们的帐户会发生什么?” 那么在这种情况下,最好放弃用户/员工与财产的关联,而只是将财产链接到员工所属的公司?这样我就可以把所有的employee.company.properties 都列出来了? 假设我们让属性属于一家公司。 就联想而言,这就是我的想法。现在看它,我看到一切都属于一家公司,因为使用该系统的一家公司不应该看到另一家公司的房东/租户/员工/财产。 另外我猜我们会有不同类型的房产(商业/住宅),其中会有整栋建筑、建筑物内的公寓(单一地址)等。 与用户一样,我计划使用多态关联来定义两个子类 CommercialProperty 和 ResidentialProperty,然后使用 sti 来定义一个类型。如果类型是“多单元”,则有一个新的单元模型和一个关联,其中 Property has_many Units 和 Unit belongs_to 属性。 我正在努力确保我的代码尽可能遵循最佳实践,以便在添加新功能和扩展时不必重新编写应用程序的大部分内容。 非常感谢您的反馈。 我读过的一些帖子。希望能帮助其他尝试解决相同问题的人。 Designing a Rails application: single table inheritance?属性
房东和租户协会
class Landlord < User
belongs_to :company
has_many :properties, :through => :ownerships
end
class Tenant < User
belongs_to :company
has_one :property, :through => tenancies #you can only live at one place at a time right?
end
class Property < ActiveRecord::Base
has_many :tenants, :through => :tenancies
has_many :landlords, :through => :ownerships
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :properties
has_many :employees
has_many :landlords :through => :ownerships #not sure if through is required/works here
has_many :tenants :through => :tenancies #not sure if through is required/works here
end
class Employees < User
belongs_to :company
end
属性
目标
参考
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3.2 polymorphic-associations single-table-inheritance