Я не уверен, почему этого обратного вызова нет, но вы всегда можете просто добавить Observer в модель и проверить новую ассоциацию в before_save. Я предполагаю, что "susan" является экземпляром пользовательской модели, и рубашка должна быть красной, чтобы пройти проверку.
class UserObserver< ActiveRecord::Observer
def before_save(user)
return false if user.shirt.color != "red"
end
end
Если вы вернете false в наблюдателе, объект не будет сохранен. Конечно, ваш текущий экземпляр «Сьюзен» все еще будет иметь недопустимую связь. Я не уверен, но если вы измените before_save_ в наблюдателе на что-то вроде этого:
class UserObserver< ActiveRecord::Observer
def before_save(user)
if user.shirt.color != "red"
user.reload
false
end
end
Может обновить экземпляр вашего пользователя. Я никогда этого не пробовал.