ActiveRecord - 防止跨表的重复条目

时间:2012-09-27 03:09:45

标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord

我的Rails项目中有两个模型(和表)。每个模型都有一个“地址”字段。

目前,我的代码集用于验证每个模型中Address的唯一性,并且在每个表上都有一个Address的索引,以防止多个连接尝试保存相同数据时出现重复。

但是,我想确保两个表格中的地址字段唯一。如同,如果地址存在于一个表中,则无法将其保存到第二个表中。

在代码中解决这个问题并不困难,但我如何在数据库级别(类似于索引)实现该检查以确保不会保存任何非唯一值?

2 个答案:

答案 0 :(得分:2)

您最好创建一个可以自行维护唯一性的地址表。而不是在其他模型上维护地址字段,而是提供关联。它可以按如下方式完成:

class Home < ActiveRecord::Base
  belongs_to :address
end

class Office < ActiveRecord::Base
  belongs_to :address
end

class Address < ActiveRecord::Base
  attr_accessible :body
  validates :body, uniqueness: true

  has_many :homes
  has_may :offices
end

答案 1 :(得分:0)

在两个表中编写自定义验证器。 custom validation rails guide是一个很好的起点。  在自定义验证器中,如果该值已存在于另一个表地址字段中,则可能引发错误。

相关问题