Каков наилучший дизайн для этой системы пользовательских типов в приложении Rails? - PullRequest
0 голосов
/ 17 ноября 2011

Это сложнее, чем я думал: я строю систему, в которой пользователи могут иметь две роли: продавцы и покупатели.Архитектура должна соответствовать следующим требованиям:

  • Пользователь должен быть как минимум одним из них или обоими.Самым распространенным случаем, конечно, будет покупатель.
  • Каждый тип пользователя имеет свой профиль с различными наборами полей
  • Когда пользователь регистрируется, один из профилей также должен быть создан и связан с ним.
  • У пользователей будут разные действия в зависимости от их типа профиля.

Я рассмотрел разные шаблоны проектирования, но не очень хорошо разбираюсь в проектировании баз данных, поэтому я не оченьуверен, какой из них применить или как.Я уже отказался от STI, поэтому я думаю, что решение должно быть каким-то пользователем has_many: анкеты и покупатель / продавец own_to: user.Но я не уверен, стоит ли мне использовать полиморфизм, сквозные или иные виды отношений.

1 Ответ

1 голос
/ 17 ноября 2011

Я создал несколько приложений с похожими требованиями.Я считаю, что лучшее решение, которое будет соответствовать вашим требованиям, это 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
...