У меня есть has_one
отношение с Device
и Car
.
Какой предпочтительный способ с ActiveRecord
для удаления ребенка от родителя (установка device_id
nil на car
но НЕ удаляя саму car
)?
Когда запускается строка device.car = nil
, она немедленно фиксируется в базе данных.Я хочу, чтобы он был зафиксирован только при сохранении и возвращал некоторую полезную ошибку, если он не был сохранен.
Я знаю, что я мог бы также попытаться найти car
, установить dongle_id
в nil
и сохраните это, но это действие скорее о мутации device
, чем car
.
:
def disconnect_car_and_device(id:)
device = Device.find(id)
authorize(current_user, device)
device.car = nil
if device.save
{ device: device, errors: [] }
else
{ device: nil, errors: build_errors(device.errors) }
end
end
модели:
class Device < ApplicationRecord
has_one :car
end
class Car < ApplicationRecord
belongs_to :device
end