也许 STI 不是我想要的,我愿意接受所有建议,但为了这个问题,让我们假设以下现实世界的情况:
您希望您的应用程序为不同的邮件供应商提供 API 数据。使用 STI,您有以下模型
class MailSetting < ActiveRecord::Base
belongs_to :user
end
class MailChimp < MailSetting
end
class AWeber < MailSetting
end
class PostageApp < MailSetting
end
现在让我们启动一些控制台操作:
user = User.first
setting = user.create_mail_setting(:type => "MailChimp")
好的,现在您要添加 API 密钥设置。MailChimp 只使用一个 api_key。Aweber 可以使用 api_key 和签名,而 Postageapp 使用 api_key 和令牌系统。
您会扩展每个子类以包含数据库中所需的任何列吗?你会一起废弃 STI 并让常规类说,MailChimp
继承自 AR 吗?
我对 STI 的理由是我知道我的所有用户都会有一个 MailSetting,它是随着时间的推移可能会扩展的类型。但是,我发现以这种方式扩展这些子类很痛苦,因为你不能在user.mail_setting.connect
不知道它们来自哪个子类的情况下做一些事情,然后,我需要什么来连接这些人?
想法?