سؤال

لدي بعض الصور التي يتم تقسيمها على الصفحات المتتالية من خلال البرنامج المساعد Will_Paginate. عندما تفتح صورة ثم العودة إلى جميع الصور باستخدام رابط ، يمكنك دائمًا العودة إلى الصفحة الأولى (على سبيل المثال ، يتم عرض الصورة في الصفحة 5 ، تقوم بفتح الصورة ، وانقر على رابط لإظهار جميع الصور وتتوقع أن تكون على صفحة 5 مرة أخرى ، لكنك في الصفحة 1).

الآن ، هل هناك أي طريقة للحصول على رقم الصفحة الذي تنتمي إليه الصورة؟

حاولت تمرير معلمة GET ، لكن هذا يعمل فقط إذا لم ينفذ المستخدم أي إجراءات أخرى (على سبيل المثال ، نشر تعليق ، تحرير الصورة ، ECC.).

هل كانت مفيدة؟

المحلول

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

بعبارات أخرى. إذا كانت صورتك تحتوي على معرف 40 وكان هناك 25 سجلًا من قبل (على افتراض أن بعض السجلات قد تم حذفها) ، مع 20 سجلًا لكل صفحة:

page = (25 / 20) + 1 = 2

يمكنك حساب عدد السجلات قبل السجل المحدد باستخدام Model.count(:conditions => ['id < ?', record.id], :order => 'id'). يعتمد الاستعلام الصحيح على مرشح الفرز الذي تنطبق عليه على هذا الجدول عند إدراج جميع الكائنات.

نصائح أخرى

يعتمد رقم الصفحة بشكل كبير على نتائج البحث. قد يحتوي بحثك على 1 أو 10 أو 100 صفحة حسب مجموعة النتائج وعدد العناصر لكل صفحة.

يمكن أن يحتوي أي رابط لـ "إظهار جميع الصور" على معلومات البحث والترقيم ، باستخدام معلمات الحصول على كما وصفتها. أو تخزين واسترداد عبر ملف تعريف الارتباط بحيث تستمر نتائج البحث حتى يقوم المستخدمون بمسح أو يختارون بحثًا جديدًا.

إليك حل آخر: Will_Paginate يستخدم فقط معلمات سلسلة الاستعلام 'Search_field' و 'page' ؛ يمكنك استخراج هذه من تجزئة القضبان. إذا قمت بتتبع أولئك الذين يستخدمون حالة الجلسة ، فيمكنك إعادة تطبيقها في رمز وحدة التحكم الخاصة بك ، عند الحاجة.

بالضبط كيف تدير ذلك يعتمد على تطبيقك. في التطبيق الذي أعمل عليه ، يكون التدفق هو أنه يمكنني التمييز بين السياق العام وسياق العضو. يدخل المستخدم سياق العضو من صفحة INDEX#العضو. لذلك قمت فقط بتعيين الجلسة [: member_context] عند الدخول إلى سياق العضو ؛ على سبيل المثال في الأعضاء#تحرير. ثم ، في فهرس الأعضاء#، لدي الرمز التالي:

if session[:member_context]
  @search_field = session[:search_field]
  @page = session[:page]
  # toggle out of member context
  session[:member_context] = nil
else
  @search_field = params[:search_field]
  @page = params[:page]
  # record lastest search in case the user subsequently enters the member context
  session[:search_field] = @search_field
  session[:page] = @page
end
@members = Member.where(<use @search_field>).page(@page)
# and render ...

هذا يعمل بشكل رائع في طلبي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top