我正在构建一个应用程序,其中用户可以有多个客户端(无法在用户之间共享)。
这是一个相当小的应用程序,但可能发生两个客户端属于同一个组织。因此,有一个额外的表来保存有关组织的所有信息会很好。客户端是私有客户端并且不属于任何组织也可能发生。
我知道在数据库设计中这是相当常见的,但是如何在Rails中建模呢?
答案 0 :(得分:1)
组织与用户的关系如何?如果用户和组织彼此独立,最简单的解决方案就是......
User - has_many :clients
Organization - has_many :clients
Client - belongs_to :user, belongs_to :organization
但我猜这里涉及的更多?您在寻找多对多的解决方案吗?
答案 1 :(得分:1)
答案是@ peter-duijnstee所说的,还有其他限制要求:
class Organization < ActiveRecord::Base
belongs_to :user
validates :user, :presence => true
end
class Client < ActiveRecord::Base
belongs_to :user
belongs_to :organization
# note the final "s", it validates a field
validates :user, :presence => true
# no final "s", validate using a method
validate :organization_user, :if => :organization_present?
def organization_present?
organization.present?
end
def organization_user
errors.add(:organization_id, "is not allowed") unless organization.user_id == user_id
end
end
答案 2 :(得分:0)
User has many clients.
Client belongs to user.
这很简单。如果您使用关系数据库,“clients”表将具有外键“user_id”。
在客户和组织之间,它是一对多吗?还是多对多? 如果它是一对多,你可以做
Organization has many clients.
Client belongs to organization.
如果它是多对多的,你需要一个映射表
Organization has and belongs to many clients.
Client has and belongs to many organizations.
详细了解Rails ActiveRecord here
中的关联