Ruby on Rails:如何为组织和客户建模?

时间:2012-09-30 19:46:36

标签: ruby-on-rails ruby ruby-on-rails-3

我正在构建一个应用程序,其中用户可以有多个客户端(无法在用户之间共享)。

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

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

3 个答案:

答案 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

中的关联