У меня есть модель "события", которая имеет много "приглашений". Приглашения настраиваются с помощью флажков в форме события. Когда событие обновляется, я хотел сравнить приглашения до обновления с приглашениями после обновления. Я хочу сделать это как часть проверки события.
Моя проблема в том, что я не могу получить доступ к старым приглашениям в любой модели обратного вызова или проверки. На этом этапе транзакция уже началась, и, поскольку приглашения не являются атрибутом модели события, я не могу использовать _was для получения старых значений.
Я думал о попытке использовать обратный вызов after_initialize, чтобы сохранить это сам. Эти обратные вызовы, похоже, не соответствуют опции «: on», поэтому я не могу сделать это только: on: update. Я не хочу запускать это каждый раз, когда объект инициализируется.
Есть ли лучший подход к этой проблеме?
Вот код в моем контроллере обновлений:
def update
params[:event][:invited_user_ids] ||= []
if @event.update_attributes(params[:event])
redirect_to @event
else
render action: "edit"
end
end
Моя основная цель - сделать так, чтобы вы могли добавлять пользователей к событию, но вы не можете не удалять пользователей. Я хочу подтвердить, что опубликованный параметр visible_user_ids содержит всех приглашенных пользователей.
- обновление
В качестве временного решения я использовал опцию: before_remove в ассоциации: has_many. Я установил его таким образом, чтобы он вызывал исключение ActiveRecord :: RollBack, которое предотвращает нежелание пользователей. Не совсем то, что я хочу, потому что я не могу отобразить ошибку проверки, но она предотвращает ее
Спасибо,
Corsen