0

アカウントに属するクレジットを持っていますが、アカウント間でやり取りされています。クレジットが現在どのアカウントに属しているか、どのアカウントが最初にクレジットを作成したかを追跡できる必要があります。現在、私は次のような協会を持っています:

    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 も一緒に変更されます。

クレジットがアカウントに属し、元のアカウントを引き続き追跡できるように関連付けを設定するにはどうすればよいですか?

4

2 に答える 2

1

関連付けの外部キーであるため、original_owner関連付けの外部キーを設定することはできません。アソシエーションごとに明確な名前の外部キーが必要です。(つまり)account_idaccountoriginal_owner_id

@credit.account.id = 3どちらも正しくあり@credit.original_owner.id = 4ません。id関連オブジェクトのを変更しようとしています。あなたがしようとしているのは、@credit.account_id = 3(外部キーを使用して)関連付けを変更することであると思います。または、オブジェクトを操作したい場合にも指摘した@credit.account = Account.find(3)ように機能します。

于 2013-09-30T16:11:45.143 に答える
0

モデルに新しい列を追加し、foreign_keyその列にマップする必要があります。

于 2013-09-30T16:03:51.433 に答える