Учитывая следующие определения
Foo
has_many :bars, :dependent => :nullify, :autosave => false
Bar
validates_presense_of :foo
foo_id is not null # database constraint
Я хотел бы повторно связать объект Bar с другим объектом Foo.Мне нужно, чтобы все это было правильно сделано в памяти, чтобы я мог отрендерить все на тот случай, если после всей проверки работы не получится.
Проблема в том, что когда я делаю что-то вроде
bar.foo.bars.delete(bar)
bar.foo = other_foo
other_foo.bars << bar
, я получаю ошибку, которая приbar.foo.bars.delete(bar)
обновление sql выполняет обнуление свойства foo_id моего бара.Поэтому исключение sql ограничение и сбой.Вместо этого мне нужно, чтобы он просто работал все в памяти и не проходил проверку при необходимости.
Редактировать:
Дело в том, что все это в транзакции, поэтому меня не волнуют обновления БД, япросто не хочу, чтобы они вызывали проблемы с ограничениями базы данных, но я хочу, чтобы мои ограничения присутствовали и не допускали нулевое значение в БД для моего объекта Bar.Когда мое сохранение выполнится, если это удастся, я хочу, чтобы мое сохранение заново связало все соответствующим образом.Если это не удается, я хочу, чтобы моя модель памяти находилась в правильно обновленном (но не действительном) состоянии, и таким образом я могу отобразить свою страницу с обновленными значениями и сообщениями о том, что обновление не удалось.
Честно говоря, моя главная цель -иметь следующую ситуацию:
до:
foo1.bars => [bar1, bar2]
foo2.bars => [bar3]
после:
foo1.bars => [bar1]
foo2.bars => [bar3, bar2]
Поэтому моя главная цель - решить эту проблему (полное обновление в памятивсе соответствующие объекты), если это не связано с повторной ассоциацией, как у меня уже есть, я тоже приму это.