2012-03-07 2 views
2

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

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

Я решил создать 2 отдельные модели для продавцов и покупателей (и генерировать их для каждого из них). Короче говоря, это вызвало некоторые проблемы (т. Е. Трудности с обработкой входа в систему с помощью одной формы, использование полиморфных ассоциаций для простых вещей, таких как «личное сообщение», сохранение моего кода DRY и т. Д.)

Так что вот что:
Вы думаете, что было бы неплохо создать одну модель (пользователь) с некоторыми распространенными полями, чтобы легко обрабатывать аутентификацию с помощью разработки, а затем иметь отдельные модели (продавцы и покупатели) с ассоциациями 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/buyers/id

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

+1

Возможный дубликат [Rails - дизайн приложения для 2 типов пользователей] (http://stackoverflow.com/questions/9517406/rails-application-design-for-2-user-types) того же пользователя. –

ответ

1

Было бы еще лучше, если вы создаете раздельные таблицы для Продавца и Покупателя и использовать полиморфные ассоциации как там Inheritance and polymorphic-associations in rails.

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

Смежные вопросы