私のアプリでは、私はいくつかの を持っており、特定のに応じて (関連付けを介して)clients
いくつか持っているので、すべてをに手動で追加する代わりに、を選択するだけですべてが自動的に追加されます ( in is )。ハブTM 。elements
has_many_through
BusinessType
Client
elements
Client
BusinessType
business_type
Client
attr_readonly
BusinessType
elements
これがキャッチです。デフォルトBusinessType
で作成した後、クライアントは要素を更新し、必要に応じて削除または追加できます(ほとんどは追加します)。したがって、私がやろうとしていることは次のとおりです。
onebusiness_type
に要素[1,2,3]
があり、 one に割り当てられているとclient
します。次に、次の要素が手動でclient
=に追加される[4,5,6]
ため、最終的には になり[1,2,3,4,5,6]
ます。ここではすべて問題ありません。
しかし、この後、business_type
が更新され、要素が2
削除されるため、最終的には になり[1,3]
ます。これが取引です。 を削除してクライアントを更新したいのですが、問題の に対応しない を削除しないでください2
。コールバックを使用して要素を更新していますが、メソッドが機能しませんHABTM 関係 (古い要素を取得するため。[4,5,6]
business_type
[1,3,4,5,6]
after_update
clients'
_was
business_type's
before_update
最初にコールバックを使用しclient.elements = client.elements - business_type.elements
て DB[1,2,3,4,5,6] - [1,2,3] = [4,5,6]
に一時的に保存し、 after_update でclient.elements = client.elements + business_type.elements
取得しようとしました[4,5,6] + [1,3] = [1,3,4,5,6]
が、これには既に の新しい値があり[1,3]
ます。business_type.elements
or で古い値を取得するにはどうすればよいですbefore_update
かafter_update
?
よろしくお願いします。