Rails has_many关联删除父对象但不删除子对象

时间:2017-11-07 07:22:57

标签: ruby-on-rails associations has-many dependent-destroy

场景是有两个模型,一个是Room,另一个是Tickets,关系是Room has_many:ticket。

要求是当房间正在删除时不应删除票证。如何实现这一点,因为票证表有外键称为room_id?

假设我能够做到这一点,那么我将如何获得该特定机票的房间信息?

3 个答案:

答案 0 :(得分:5)

这是Rails的一般行为。我猜您在关联中使用dependent: :destroy

您想要做的是dependent: :nullify。这将删除您的会议室对象而不删除关联的故障单,并仅在故障单中将room_id更新为空

class Room < ActiveRecord::Base
    has_many :tickets, dependent: :nullify
end

根据您在删除后访问房间详细信息的第二个问题,我建议您使用soft_delete而不是实际删除。在这里,你将要做的是,当房间被删除,而不是实际删除它,你将软删除它。因此,门票记录将持续存在,您也可以使用房间详细信息。

有宝石可供选择。一个这样的宝石是Paranoia。你可以在这个宝石上查找各种教程。

希望这有帮助。如果您需要任何其他指导,请告诉我。

答案 1 :(得分:1)

dependent: :nullify添加到has_many关联,这将在删除父级后将foreign_key更改为null:

has_many :tickets, dependent: :nullify

查看rails文档:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

答案 2 :(得分:1)

你可以这样做

class Room < ActiveRecord::Base
 has_many :tickets,dependent: :nullify
end

结帐this