场景是有两个模型,一个是Room,另一个是Tickets,关系是Room has_many:ticket。
要求是当房间正在删除时不应删除票证。如何实现这一点,因为票证表有外键称为room_id?
假设我能够做到这一点,那么我将如何获得该特定机票的房间信息?
答案 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)