我有属于账户的积分,但在账户之间来回交易。我需要能够跟踪信用证当前属于哪个帐户,以及最初创建信用卡的帐户。目前我有这样一个协会:
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。
如何设置我的关联,以便我的积分属于某个帐户,但仍会跟踪其原始帐户?
答案 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
映射到该列。