在Rails应用程序中,此用户类型系统的最佳设计是什么?

时间:2011-11-17 01:49:16

标签: ruby-on-rails database-design roles

这比我想象的要困难:我正在构建一个系统,用户可以在其中扮演两个角色:卖家和买家。架构必须满足这一要求:

  • 用户必须至少是其中之一,或两者兼而有之。最常见的情况当然是买方。
  • 每个用户类型都有自己的配置文件,具有不同的字段集
  • 当用户注册时,还必须创建其中一个配置文件并将其关联到其中。
  • 根据个人资料的类型,用户可以使用不同的操作。

我考虑过不同的设计模式,但我不擅长数据库设计,所以我不确定应用哪一个或如何应用。我已经放弃了STI,所以我认为解决方案必须是某种用户has_many:profiles&买方/卖方belongs_to:用户。但我不确定我是否应该使用多态,通过或其他类型的关系。

1 个答案:

答案 0 :(得分:1)

我已经构建了一些具有类似要求的应用程序。我认为满足您要求的最佳解决方案是has_many :through

class Person < ActiveRecord
  has_many :assignments
  has_many :roles, :through => :assignments
end

class Assignment < ActiveRecord
  belongs_to :person
  belongs_to :role
end

class Role < ActiveRecord
  has_many :assignments
  has_many :people, :through => :assignments

  validates :name, :presence => true

  delegates :profile, :to => :assignment
end

数据库:

 people
   |-- first_name, :string
   |-- last_name, :string

 assignments
   |-- person_id, :integer
   |-- role_id, :integer
   |-- profile, :text

 roles
   |-- name, :string