В моем приложении, у меня есть несколько clients
, и у них есть несколько elements
(через has_many_through
ассоциация) в зависимости от определенного BusinessType
, к которому Client
принадлежит так, что вместо того, чтобы вручную добавлять все elements
к Client
, я можно просто выбрать BusinessType
и все будет добавляться автоматически (business_type
в Client
is attr_readonly
). BusinessType
HABTM elements
.Попадая предыдущих значения HABTM
Вот улов, после создания с по умолчанию BusinessType
, клиенты могут обновить свои элементы и удалять или добавлять как им заблагорассудится (в основном добавить), так что я пытаюсь сделать, это следующее:
Пусть один business_type
имеет элементы [1,2,3]
и присваивается одному client
, то следующие элементы добавляются вручную к client
= [4,5,6]
, поэтому он заканчивается тем, что имеет [1,2,3,4,5,6]
, все в порядке.
Но после этого business_type
обновляется и удаляется элемент 2
, поэтому он заканчивается [1,3]
. Вот сделка, я хочу, чтобы клиент был обновлен, удалив 2
, но не [4,5,6]
, которые не соответствуют business_type
, так что он заканчивается [1,3,4,5,6]
. Я использую обратный вызов after_update
для обновления элементов clients'
, но _was
метод не работает для HABTM отношений (чтобы получить старые business_type's
элементы.
Я попытался с помощью before_update
обратного вызова сначала client.elements = client.elements - business_type.elements
хранить на мгновение в БД [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
в before_update
или after_update
?
Заранее благодарим за вашу помощь!