Ruby on rails Rails在子级上将外键设置为nil的首选方法
我与Ruby on rails Rails在子级上将外键设置为nil的首选方法,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我与设备和汽车有一个关系 使用ActiveRecord从父项中删除子项的首选方法是什么(在car上设置device\u idnil,但不删除car本身) 当device.car=nil行运行时,它会立即提交到数据库。我希望它只在保存时提交,如果没有保存,则返回一些有用的错误 我知道我也可以尝试查找汽车,将加密狗id设置为nil并保存,但此操作与设备有关,而不是与汽车有关 突变: def disconnect_car_and_device(id:) device = Device.find(i
设备和汽车有一个关系
使用ActiveRecord
从父项中删除子项的首选方法是什么(在car
上设置device\u id
nil,但不删除car
本身)
当device.car=nil
行运行时,它会立即提交到数据库。我希望它只在保存时提交,如果没有保存,则返回一些有用的错误
我知道我也可以尝试查找汽车
,将加密狗id
设置为nil
并保存,但此操作与设备
有关,而不是与汽车
有关
突变:
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
类设备
尝试了不同的方法后,我发现下面的代码可以按预期工作:
def disconnect_car_and_device(id:)
device = Device.find(id)
authorize(current_user, device)
car = device.car
if device.save && car.update(device: nil)
{ device: device, errors: [] }
else
{ device: nil, errors: build_errors(device.errors) }
end
end
尝试了不同的方法后,我发现以下代码可以按预期工作:
def disconnect_car_and_device(id:)
device = Device.find(id)
authorize(current_user, device)
car = device.car
if device.save && car.update(device: nil)
{ device: device, errors: [] }
else
{ device: nil, errors: build_errors(device.errors) }
end
end
您确定当device.car=nil行运行时,它会被提交到数据库吗?它只会在您保存设备时提交到数据库,否则它会将nil值指定给设备对象,但不会在数据库中。我想也是这样。但我在控制台中运行它,当我运行该行时,它被提交。也许这个答案会对您有所帮助device.car=nil
被提交到数据库,因为HasOneAssociation
如何实现writer方法car=
。无法从设备
取消关联链接,因为创建链接的属性位于汽车
中。您确定当Device.Car=nil行运行时,它会提交到数据库吗?它只会在您保存设备时提交到数据库,否则它会将nil值指定给设备对象,但不会在数据库中。我想也是这样。但我在控制台中运行它,当我运行该行时,它被提交。也许这个答案会对您有所帮助device.car=nil
被提交到数据库,因为HasOneAssociation
如何实现writer方法car=
。无法取消关联与设备的链接,因为创建链接的属性位于汽车中。您好!最好给你的答案留个解释。嗨!最好给你的答案留个解释。