Rails:验证唯一对

时间:2017-11-16 18:11:02

标签: ruby-on-rails ruby database model

我有一个名为Users的模型。我希望两个用户与我的Conversation模型相关联,但我希望用户对(User1,User2)是唯一的。例如,如果user1为5且user2为6,则不能存在user1为6且user2为5的对。

我已经确定两个用户不一样/没有User1和User2组合相同

validates :user1_id, uniqueness: { scope: :user2_id}

但是如何确保如果与User1和User2进行对话,则无法与User2和User1进行对话?另外,我怎样才能确保User1和User2不一样? (即,如果User1为6且User2也为6则无效)

1 个答案:

答案 0 :(得分:3)

我建议custom validation method

.as-console-wrapper { max-height: 100% !important; top: 0; }

另一种选择可能是对用户ID进行排序,并确保validate :validate_users_are_unique private def validate_users_are_unique if self.class.where(user1_id: user1_id, user2_id: user2_id) .or(self.class.where(user1_id: user2_id, user2_id: user1_id)) .exists? errors.add(:base, 'User 1 and User 2 combination exists!') end end 始终是两者中较小的一个。然后可以使用默认的Rails唯一性验证。通过添加唯一索引,可以在数据库级别确保唯一性:

user1_id