我有一个名为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则无效)
答案 0 :(得分:3)
.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