2

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

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

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

4

3 回答 3

8

这是 Rails 的一般行为。我猜你dependent: :destroy在你的协会中使用。

你想做的是dependent: :nullify. 这将删除您的房间对象而不删除关联的票证,并且仅room_id将票证中的 更新为 null

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

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

有相同的宝石。一个这样的宝石是偏执狂。您可以查找有关此 gem 的各种教程。

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

于 2017-11-07T07:30:47.747 回答
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

于 2017-11-07T07:28:59.980 回答
1

你可以这样做

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

签出这个

于 2017-11-07T07:30:21.217 回答