我有过
class CarpoolGroup < ActiveRecord::Base
has_many :cars
end
class Car < ActiveRecord::Base
belongs_to :carpool_group
has_many :car_types
end
class CarType < ActiveRecord::Base
belongs_to :car
has_one :carpool_group, through: :car
end
当我开始
car_type.carpool_group = nil
或者当我保存carpool_group
时,连接的Car
对象将从DB中删除。在设置DELETE from "cars" where ...
之后,我会看到SQL car_type.carpool_group = nil
。
如何通过关联保持has_one
并避免此删除?
发布于 2017-05-01 23:18:20
Rails总是为through
关联删除中间记录,因为Rails并不认为中间记录是独立的实体,而是作为实体之间的连接器。
在您的情况下,您有两个选择:
选项1:
在carpool_group = nil
上直接调用car
cat_type.car.carpool_group = nil
备选方案2:
将has_one
替换为delegate
class CarType < ActiveRecord::Base
belongs_to :car
delegate :carpool_group, to: :car, allow_nil: true
end
当原始代码cat_type.carpool_group = nil
不会删除汽车。
发布于 2017-05-01 20:06:55
您需要指定CarType与Car的关联。在has_one解密之前
class CarType < ActiveRecord::Base
belongs_to :car
has_one :carpool_group, through: :car
end
https://stackoverflow.com/questions/43725199
复制相似问题