我有
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
对象从数据库中已删除。在设置DELETE from "cars" where ...
之后,我看到了SQL car_type.carpool_group = nil
。
如何通过关联保留has_one
并避免删除?
答案 0 :(得分:1)
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
不会删除汽车。
答案 1 :(得分:0)
您需要在has_one decleration
之前指定CarType与Car ..的关联class CarType < ActiveRecord::Base
belongs_to :car
has_one :carpool_group, through: :car
end