Rails 5.0 - 如何检查记录是否与另一个表相关联?

时间:2016-10-27 17:44:56

标签: ruby-on-rails database postgresql validation ruby-on-rails-4

在销毁记录之前,我想检查其他表上是否有任何用途,即使记录本身不知道所述用途

例如,假设我有一张cost_centers的表格,我有一张areas的表格。

area有一个默认cost_centercost_centersareas无关。

我可以使用哪种validation来阻止用户销毁cost_center,以保持area一致?

换句话说,如何在数据库中搜索以找出该记录是否是其他任何表上其他记录的外键?

1 个答案:

答案 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