0

我正在构建一个用户可以拥有许多客户端(不能在用户之间共享)的应用程序。

这是一个相当小的应用程序,但可能会发生两个客户端属于同一个组织的情况。因此,最好有一个额外的表格来保存有关该组织的所有信息。客户也可能是私人客户并且不属于任何组织。

我知道这在数据库设计中是相当普遍的,但是如何在 Rails 中建模呢?

4

3 回答 3

1

组织与用户的关系如何?如果用户和组织彼此独立,最简单的解决方案是拥有......

User         - has_many :clients
Organization - has_many :clients
Client       - belongs_to :user, belongs_to :organization

但我猜这里涉及的更多?您是否正在寻找多对多的解决方案?

于 2012-09-30T20:07:35.587 回答
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
于 2012-10-01T11:15:33.047 回答
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 中关联的更多信息

于 2013-12-13T16:40:47.133 回答