Это не красиво, но это работает для меня:
class Waiting < ActiveRecord::Base
validate :must_be_unique
def must_be_unique
if self.class.where(project_id: project_id, category_id: category_id, user_id: user_id).exists?
errors.add(:base, 'Must be unique')
end
end
end
Конечно, вы можете просто использовать уникальный ключ в своей схеме БД, а затем отлавливать соответствующие исключения в тех редких случаях, когда вам нужно.