我的 Rails 项目中有两个模型(和表)。每个模型都有一个“地址”字段。
目前,我设置了代码来验证每个模型中地址的唯一性,并且在每个表上都有一个地址索引,以防止在多个连接尝试保存相同数据的情况下重复。
但是,我想确保地址字段在两个表中是唯一的。如,如果地址存在于一个表中,则无法将其保存到第二个表中。
在代码中解决这个问题并不难,但我将如何在数据库级别(类似于索引)实现该检查以确保不会保存任何非唯一值?
我的 Rails 项目中有两个模型(和表)。每个模型都有一个“地址”字段。
目前,我设置了代码来验证每个模型中地址的唯一性,并且在每个表上都有一个地址索引,以防止在多个连接尝试保存相同数据的情况下重复。
但是,我想确保地址字段在两个表中是唯一的。如,如果地址存在于一个表中,则无法将其保存到第二个表中。
在代码中解决这个问题并不难,但我将如何在数据库级别(类似于索引)实现该检查以确保不会保存任何非唯一值?
您最好创建一个地址表,该表可以自行负责维护唯一性。与其在其他模型上维护地址字段,不如提供关联。可以这样做:
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
在两个表中编写自定义验证器。自定义验证 rails guide 是一个很好的起点。在自定义验证器中,如果该值已经存在于另一个表的地址字段中,则可以引发错误。