Привет, все,
Я работаю над приложением в Ruby on Rails, где нам необходимо отслеживать набор внешних сервисов для каждого пользователя (например, Facebook, MySpace, Google, SalesForce, Twitter, WordPress и т. Д.), Которое приложение будет доступ от имени пользователя. Для некоторых служб нам потребуется хранить (зашифрованное) имя пользователя и пароль, для некоторых нам потребуется сохранить данные OAuth, некоторые данные OAuth2 и т. Д. По мере роста приложения нам необходимо будет поддерживать еще больше типов учетных записей, каждая из которых будет иметь свой собственный набор данных для аутентификации.
Каждый пользователь может создавать сообщения в приложении, и мы возьмем эти сообщения и отправим их во внешние службы для публикации для пользователя. Затем мы отслеживаем ответ на опубликованный пост (ретвиты в Twitter, лайки / публикации в Facebook и т. Д.).
Итак:
class User < ActiveRecord::Base
has_many :services
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :publishes
end
class Publish < ActiveRecord::Base
has_one :service
belongs_to :post
end
class Service < ActiveRecord::Base
belongs_to :user
belongs_to :publish
end
Я спорю между использованием наследования одной таблицы для моих типов Service
(например, WordpressService
, FacebookService
, TwitterService
и простым сериализацией простого хэша для сохранения данных аутентификации) и использованием традиционного Нормализованная схема, где у каждого вида услуг есть своя модель и таблица. Я хотел бы иметь возможность легко перебирать все сервисы, связанные с пользователем, и публикация должна быть связана с любым типом сервисов (например, публикация может быть отправлена на WordPress, Facebook или Twitter) .
Могу ли я достичь такого рода модельных отношений, используя традиционный нормализованный подход? Или это именно то, что STI должен был решить?
Спасибо.