Есть модель model1, она has_one: model2
Есть роут для внесения изменений в model1:
class Model1Controller
def update
@model1 = Model1.where(params[:id]).first
@model1.with_lock do
@model1.update_attributes({:model1attr, :model2_attributes=>{:model2attr}})
if @model1.errors.empty?
flash[:success] = "все хорошо"
else
flash[:error] = "все плохо"
end
redirect_to кудабытонибыло
end
end
end
Проблема заключается в том, что при редактировании записи в связанной таблице model2 запрос строится таким образом, что связанная запись удаляется, а затем вставляется новая (в логах 2 запроса delete model2, insert model2), Если при вставке новой записи не проходит валидация полей model2, то insert не случается и запись утеривается.
Вопрос 1. Можно ли настроить поведение рельс таким образом, чтобы она вызывала update запрос на связанной модели
Вопрос 2. Если нельзя так сделать, то как отменить удаление связанной записи, транзакция в том виде, которая представлена не спасает