Rails:如何validation只有一对多关系的多边记录被标记为主要记录

我在我的Rails应用程序中设置了一对多关系: Person有很多Addresses 。 我在我的Addresses表中添加了一个名为is_primary 。 如何通过validation强制执行只有一个地址将is_primary设置为true?

基本上我想说:对于所有具有is_primaryPersonaddressable_idX Addresses行,只有一个可以将is_primary设置为true 。 如果不是这种情况,请拒绝保存并抛出表单validation错误。

PersonAddress之间添加新的一对一关联不是更好吗? 这样,您将确保只有一个主地址,而无需进行任何validation和error handling。

 class Person belongs_to :primary_address, class_name: 'Address' has_many :addresses end class Address belongs_to :person def is_primary? self.person.primary_address == self end end