Рассмотрим случай, когда у нас есть несколько магазинов и предметов.У каждого товара может быть много магазинов, и у каждого магазина может быть много товаров, чтобы они были связаны между собой таблицей соединений (или кросс-таблицей).Допустим, что каждый магазин может также проводить свою собственную акцию, содержащую комплект товаров, место, где мы могли бы хранить это, находится на столе присоединения, который может принадлежать акции.В конце рекламной акции ее можно уничтожить, но мы хотим сохранить связь между магазинами и товарами, поэтому мы бы аннулировали promotion_id
.
class Store
has_many :store_items, dependent: :destroy
has_many :items, through: :store_items
end
class Item
has_many :store_items, dependent: :destroy
has_many :items, though: :store_items
end
class Promotion
has_many :store_items, dependent: :nullify
end
class StoreItem
belongs_to: :item
belongs_to: :store
belongs_to: :promotion, optional: true
end
В идеале мы могли бы разрешить StoreItem
иметь много Promotion
с, а затем сохранять даты и время в таблице присоединения, чтобы мы знали, когда StoreItem
участвовал в повышении или нет, но это может быть слишком сложно.