使用关联但没有主对象的数据库表的Rails模型的最佳方法是什么?

时间:2011-03-21 18:51:23

标签: ruby-on-rails activerecord

例如,我有一个帐户对象。我将该帐户对象存储在称为帐户服务的外部服务中。但我想将存储在外部服务中的帐户与本地应用程序首选项相关联。

更具体地说,我们说这种关联是付款方式。帐户可以有多种付款方式。我不希望付款方法存储在外部服务中,而是消耗应用程序。所以我将有一个名为account_payment_methods的表,它将具有映射到外部服务帐户的帐户ID和映射到本地payment_method表的付款方式ID。

我有一个AccountPaymentMethod模型,我可以使用它,但能够做account.payment_methods << PaymentMethod.first或类似的事情会很好。

是否有开箱即用的已知方法或我是否自己编写此功能?

3 个答案:

答案 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的对象,并拥有该关系的实际外键。