大家好,
我正在使用 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 想要解决的问题?
谢谢。