Как настроить полиморфную ассоциацию людей и пользователей? - PullRequest
1 голос
/ 10 декабря 2011

Если есть модель People, как я могу настроить полиморфную ассоциацию пользователей и клиентов?

Например, человек может выступать в качестве пользователя или клиента.Люди могут быть Пользователями (дополнительные столбцы: имя пользователя, пароль) или Клиентом (без дополнительных столбцов).

Я пытаюсь настроить это так

  1. У меня не будет отдельной таблицы «Пользователи» и «Клиенты»
  2. . Я не хочу иметь таблицу «Люди» с большим количеством пустых столбцов имени пользователя и пароля

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Я согласен с Му-соком, правильный подход - люди + роли. Вот конкретный пример:

class Person < ActiveRecord::Base
  has_many :roles, :through => :roles_people
  #columns would be username, password, etc
end

class Role < ActiveRecord::Base
  has_many :people, :through > :roles_people
  #a column of role_type would be required here and the values of such would be Customer, User, etc.  in this class you will put logic that is needed to execute the functions of the role
end

class RolesPerson < ActiveRecord::Base
   belongs_to :person
   belongs_to :role
   #this is a join model for a many-to-many relationship. you can store info in here about when a person acquired a certain role, etc.
end
1 голос
/ 10 декабря 2011

Я бы взял одну таблицу с пустыми столбцами имени пользователя и пароля над отдельной таблицей. Я хотел бы представить дополнительную таблицу под названием roles или что-то подобное, и другую таблицу ссылок, которая связывает людей с тем, кем они являются (пользователь, клиент или даже, возможно, оба).

Я говорю это потому, что вам не нужны две таблицы и вам не нужны дополнительные столбцы. Вы должны выбрать один из них.

...