# /polls/voters.json يعيد مستخدمين مكررين عبر طلبات مرقمة صفحات

**URL:** <https://meta.discourse.org/t/polls-voters-json-returning-duplicate-users-across-paged-requests/376636>\
**Category:** Bug\
**Tags:** polls, pr-welcome, rest-api\
**Created:** [30 يوليو 2025، 11:06م UTC](https://meta.discourse.org/t/polls-voters-json-returning-duplicate-users-across-paged-requests/376636 "2025-07-30T23:06:16Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![robmackenzie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/robmackenzie/32/515453_2.png) [@robmackenzie](https://meta.discourse.org/u/robmackenzie)\
**Post date:** [30 يوليو 2025، 11:06م UTC](https://meta.discourse.org/t/polls-voters-json-returning-duplicate-users-across-paged-requests/376636/1 "2025-07-30T23:06:16Z")

</div>

عند استدعاء نقطة النهاية /polls/voters.json، باستخدام التقسيم إلى صفحات، وجدنا أن الاستدعاء الأول يُرجع 25 مستخدمًا كما هو متوقع، ولكن الصفحة الثانية تُرجع 26 مستخدمًا، تم إرجاع أحدهم في الاستدعاء الأول. هذا ثابت كلما كان هناك أكثر من 25 مستخدمًا.

المشكلة هنا في إضافة الاستطلاع لـ discourse:  
[https://github.com/discourse/poll/blob/main/plugins/poll/lib/poll.rb#L223](https://github.com/discourse/poll/blob/main/plugins/poll/lib/poll.rb#L223)

يتم حساب الإزاحة بافتراض أن استعلامات PostgreSQL حصرية مع حد للصف باستخدام BETWEEN، عندما تكون شاملة.

الاستعلام الأول يُرجع بالفعل 25، لأن الصفوف المحسوبة تبدأ بالفعل من 1، وليس 0.

إصلاحي المقترح بسيط مثل:

```plaintext
   params = {
      offset: offset + 1,
      offset_plus_limit: offset + limit,
      option_digest: opts[:option_id].presence,
    }

```

أو، قد يكون الحل الأكثر أناقة هو استخدام LIMIT و OFFSET في PostgreSQL

```plaintext
    params = {
      limit: limit,
      offset: offset,
      option_digest: opts[:option_id].presence,
    }

```

```plaintext
          WHERE pv.poll_id IN (:poll_ids)
                /* where */
        ) v
        ORDER BY digest, CASE WHEN rank = 'Abstain' THEN 1 ELSE CAST(rank AS integer) END, username
        LIMIT :limit OFFSET :offset
      SQL

```

---

_[View the full topic](https://meta.discourse.org/t/polls-voters-json-returning-duplicate-users-across-paged-requests/376636)._
