И ещё раз:
1. Универсального метода нет. Код пишет разраб.
2. События круд для связей такого типа можно хранить в обсервере. НО нужно быть уверенным в том, что при создании записи релейшен уже существует.
3. Чтобы код не дублировать, обработку можно вынести в один метод и в нужных обращаться к нему (ООП).
4. Логику пишешь не там - её нужно писать в обсервере. Толстые модели, как и толстые контроллеры - плохо.