场景是有两个模型,一个是房间,另一个是票证,关系是房间has_many:票证。
要求是,当房间删除票证时,不应删除。如何完成此操作,因为票证表的外键称为room_id?
假设如果我能够做到这一点,那么我将如何能够获得该特定票证的房间信息?
这是 Rails 的一般行为。我猜你正在使用你的协会中的dependent: :destroy
。
您要做的是dependent: :nullify
.这将删除您的房间对象而不删除关联的票证,并且仅将票证中的room_id
更新为 null
class Room < ActiveRecord::Base
has_many :tickets, dependent: :nullify
end
根据您在删除后访问房间详细信息的第二个问题,我建议您使用soft_delete而不是实际删除。在这里,您要做的是,当删除房间时,您将软删除它,而不是实际删除它。因此,门票记录将保留,您还可以使用房间详细信息。
有宝石可用于相同。其中一种宝石是偏执狂。您可以在此 gem 上查找各种教程。
希望这是有帮助的。如果您需要任何其他指导,请告诉我。
你可以这样做
class Room < ActiveRecord::Base
has_many :tickets,dependent: :nullify
end
结帐这个
将dependent: :nullify
添加到has_many关联中,这将在删除父级后将foreign_key更改为空值:
has_many :tickets, dependent: :nullify
查看导轨文档:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many