Rails - 将对象与多个帐户相关联,然后修改关联

时间:2013-09-30 15:23:36

标签: ruby-on-rails

我有属于账户的积分,但在账户之间来回交易。我需要能够跟踪信用证当前属于哪个帐户,以及最初创建信用卡的帐户。目前我有这样一个协会:

    class Credit < ActiveRecord::Base
      belongs_to :original_owner, :foreign_key => "account_id", :class_name => "Account"
      belongs_to :account, :class_name => Account
    end

现在在rails控制台中,我可以设置Credit.account.id = 3和Credit.original_owner.id = 4,但这只会更改“帐户ID”并且实际上不会更改关联。如果我设置Credit.account = Account.find(3),那可以,但我不能将Credit.original_owner设置为Account.find(4)。它表示它保存正确,但没有。它只会随Credit.account而改变。每次我更改帐户时,它都会随之更改original_owner。

如何设置我的关联,以便我的积分属于某个帐户,但仍会跟踪其原始帐户?

2 个答案:

答案 0 :(得分:1)

您无法将original_owner关联的外键设置为account_id,因为这是account关联的外键。您需要为每个关联指定一个明确命名的外键。 (即original_owner_id

@credit.account.id = 3@credit.original_owner.id = 4也不正确。您正在尝试更改关联对象的id。我假设您正在尝试修改关联,这是使用@credit.account_id = 3(使用外键)完成的,或者,正如您所指出的@credit.account = Account.find(3),如果您想使用对象,它也可以工作。

答案 1 :(得分:0)

您需要在模型中添加新列,并将foreign_key映射到该列。