use*_*290 7 activerecord ruby-on-rails
:dependent => :nullify
为什么我要使依赖对象无效,因为我没有看到孤立数据库记录的目的.
m_x*_*m_x 22
无效只在非常具体的情况下才有用; 例如,假设您有一些项目,可能会或可能不会由一个代理程序调查(因此其引用代理程序的外键字段可以为null).如果代理放弃了他处理的所有调查(让我们说他被解雇了),你不想破坏项目记录,但是你不能让它引用不再存在的代理记录,所以你无效它的外国关键领域.
小智 6
考虑一下我们有许多商店和商品的情况。每个项目可以有许多商店,每个商店可以有许多项目,因此它们通过连接表(或交叉表)链接。假设每个商店也可以进行自己的包含一组商品的促销活动,我们可以将其存储在可选属于促销活动的连接表上。在促销结束时,它可以被销毁,但我们希望保留商店和商品之间的链接,因此我们将取消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具有多个Promotions,然后将日期时间存储在连接表上,以便我们知道 何时StoreItem处于促销活动中,但这可能会使事情变得过于复杂。
| 归档时间: | 
 | 
| 查看次数: | 10591 次 | 
| 最近记录: |