Rails - дизайн приложения для 2 типов пользователей - PullRequest
1 голос
/ 01 марта 2012

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

Проблема заключается в том, что я пытаюсь создать модель личных сообщений (как продавцов, так ипокупатели могут связываться друг с другом).Как правило, я бы просто сгенерировал модель с названием message с 3 полями (from_user_id to_user_id и content).Это не будет работать в моем случае, потому что может быть 2 пользователя с одинаковым идентификатором (1 продавец и 1 покупатель).

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

Любые идеикак я могу элегантно решить мою проблему?

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Почему вы решили не иметь одну модель пользователя?Рассматривая все проблемы, вызванные наличием этих пользователей в двух отдельных таблицах, у меня была бы модель User, и я бы расширил эту модель, чтобы иметь модель Buyer и модель Seller.

Я думаю, что покупатель или продавец все еще пользовательвашего приложения, это решает проблему сообщения от пользователя к другому тоже.

class User < ActiveRecord::Base
  # Remember to add a "type" column in the users table
end

class Seller < User
end

class Buyer < User
end

Сообщения теперь между пользователями, независимо от того, какой пользователь.

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

То, что вы ищете, является полиморфной ассоциацией. Это позволяет вам иметь модель, которая может принадлежать нескольким другим моделям через те же отношения, указав идентификатор, а также класс другого объекта. Например, если идентификатор покупателя 3 отправляет сообщение продавцу с идентификатором 5, ваша таблица сообщений будет иметь следующую строку:

sender_id = 3
sender_type = Buyer
receiver_id = 5
receiver_type = Seller

Для этого в активной записи ваши модели будут выглядеть следующим образом:

class Message < ActiveRecord::Base
  belongs_to :sender, :polymorphic => true
  belongs_to :receiver, :polymorphic => true
end

class Buyer < ActiveRecord::Base
  has_many :sent_messages, :class_name => "Message", :as => :sender
  has_many :received_messages, :class_name => "Message", :as => :receiver
end

class Seller < ActiveRecord::Base
  has_many :sent_messages, :class_name => "Message", :as => :sender
  has_many :received_messages, :class_name => "Message", :as => :receiver
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...