在销毁记录之前,我想检查其他表上是否有任何用途,即使记录本身不知道所述用途。
例如,假设我有一张cost_centers
的表格,我有一张areas
的表格。
area
有一个默认cost_center
。 cost_centers
与areas
无关。
我可以使用哪种validation
来阻止用户销毁cost_center
,以保持area
一致?
换句话说,如何在数据库中搜索以找出该记录是否是其他任何表上其他记录的外键?
答案 0 :(得分:2)
在设计数据库时,您可能已经设置了所有引用。
在您的迁移中,它看起来像这样:t.references :cost_center
。
如果是这样,您的费用中心模型与持有参考的每个表可能有has_one
关系,在您的示例中,该参考将为has_one :area
。
然后,要检查它是否实际使用,您可以对方法进行before_destroy
回调,以检查任何has_one
定义是否为空:
class CostCenter < ActiveRecord::Base
has_one :area
before_destroy :check_usage
def check_usage
!self.area.nil?
end
end