1

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

目前,我设置了代码来验证每个模型中地址的唯一性,并且在每个表上都有一个地址索引,以防止在多个连接尝试保存相同数据的情况下重复。

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

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

4

2 回答 2

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
于 2012-09-27T03:37:11.097 回答
0

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

于 2012-09-27T08:56:09.437 回答