Рубин на рельсах - 2 типа пользователей - PullRequest
2 голосов
/ 07 марта 2012

Я пишу приложение ruby ​​для рельсов, которое будет иметь 2 разных типа пользователей (скажем, продавцы и покупатели).Я использую devise gem для обработки аутентификации.

Я не хочу использовать наследование одной таблицы по 3 причинам:
1) Я не хочу, чтобы в моей пользовательской таблице было много столбцов (Мне нужно было бы хранить поля для продавца и покупателя в одной таблице, и они будут иметь много разных полей)
2) Я не хочу, чтобы в моей базе данных было много пустых значений
3)Разделение продавцов и покупателей поможет повысить скорость работы

Я решил создать 2 отдельные модели для продавцов и покупателей (и создать для каждой из них устройство).Короче говоря - это вызвало некоторые проблемы (т.е. проблемы с обработкой входа в систему с помощью одной формы, использованием полиморфных ассоциаций для простых вещей, таких как «личное сообщение», хранение моего кода СУХОЙ и т. Д.)вопрос:
Как вы думаете, было бы неплохо создать одну модель (пользователя) с некоторыми общими полями для простой обработки аутентификации с помощью устройства devise, а затем иметь отдельные модели (продавцов и покупателей) с ассоциациями own_to и has_one дляхранить больше информации.Примерно так:

class User < ActiveRecord::Base
  has_one :seller
  has_one :buyer
end

class Seller < ActiveRecord::Base
  belongs_to :user, :conditions => "user_type= 'seller'"
end

class Buyer < ActiveRecord::Base
  belongs_to :user, :conditions => "user_type= 'buyer'"
end

Это хорошее решение?Или вы думаете, что наследование одной таблицы было бы лучше?

Какие проблемы / трудности это может вызвать?
Какими будут маршруты для отображения страницы профиля для каждого пользователя?Я хотел бы иметь что-то вроде website.com / sellers / id и website.com / покупатели / id

Если вы можете придумать лучшее решениедля моей проблемы - пожалуйста, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Было бы еще лучше, если бы вы создали отдельные таблицы для Продавца и Покупателя и использовали полиморфную ассоциацию, например, там Наследование и полиморфные ассоциации в рельсах .

Разделяя эти две вещи, вы ускоряете запросы к БД, и сохранение логики «Продавец» и «Покупатель» в своих собственных классах также является очень хорошей практикой.

1 голос
/ 07 марта 2012

Может быть, вы ищете наследование нескольких таблиц:
http://techspry.com/ruby_and_rails/multiple-table-inheritance-in-rails-3/ http://mediumexposure.com/multiple-table-inheritance-active-record/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...