例如,我有一个帐户对象。我将该帐户对象存储在称为帐户服务的外部服务中。但我想将存储在外部服务中的帐户与本地应用程序首选项相关联。
更具体地说,我们说这种关联是付款方式。帐户可以有多种付款方式。我不希望付款方法存储在外部服务中,而是消耗应用程序。所以我将有一个名为account_payment_methods的表,它将具有映射到外部服务帐户的帐户ID和映射到本地payment_method表的付款方式ID。
我有一个AccountPaymentMethod模型,我可以使用它,但能够做account.payment_methods << PaymentMethod.first
或类似的事情会很好。
是否有开箱即用的已知方法或我是否自己编写此功能?
答案 0 :(得分:1)
Ryan bates不久前在这个screen-cast中报道了这一点。我很确定这将适用于您的场景。确保在指定关联时设置正确的主键/外键属性。
答案 1 :(得分:1)
在Rails 3.2+中,您可能希望查看this gem。无表格模型RailsCast不再工作了。
答案 2 :(得分:0)
我想这取决于您希望连接数据存在的位置。
如果信息将存在于帐户服务中:
我不认为你可以在非ActiveRecord :: Base-subclass类上拥有关联,除了从ActiveRecord内部攻击它们(通过创建自己的HasManyAssociation子类,读取你的存储属性。)所以你可能有点运气不好。
如果您希望信息存在于普通数据库中:
我可能有一个AccountBridge模型,它将Account映射到适当的表,然后将关联放在那里;还将帐户的方法代理到帐户对象。然后,我将拥有名义上have_{one,many} :account(s)
秘密代理AccountBridge的对象,并拥有该关系的实际外键。