قم بترقيم الصفحات عبر قائمة عشوائية من منشورات المدونة باستخدام will_paginate
-
03-07-2019 - |
سؤال
أريد أن أمنح المستخدمين القدرة على تصفح منشورات مدونتي بترتيب عشوائي.
لا أستطيع تنفيذها هكذا:
@posts = Post.paginate :page => params[:page], :order => 'RANDOM()'
منذ :order
يتم استدعاء المعلمة مع كل استعلام، وبالتالي أخاطر بتكرار منشورات المدونة.
ما هي الطريقة الأفضل لعمل هذا؟
المحلول
تقبل RAND بذرة في MySQL:
RAND(N)
من مستندات MySQL:
راند()، راند(ن)
إرجاع قيمة عائمة عشوائية في النطاق 0 <= v <1.0.إذا تم تحديد وسيطة عدد صحيح ثابت n ، يتم استخدامها كقيمة البذور ، والتي تنتج تسلسلًا قابلًا للتكرار من قيم الأعمدة.في المثال التالي ، لاحظ أن تسلسل القيم التي تنتجها RAND (3) هي نفس الأماكن التي يحدث فيها.
يجب أن يكون لقواعد البيانات الأخرى وظائف مماثلة.
إذا كنت تستخدم نفس في كل مرة تتصل فيها بـ RAND، سيكون الترتيب متسقًا عبر الطلبات ويمكنك ترقيم الصفحات وفقًا لذلك.
يمكنك بعد ذلك تخزين البذرة في جلسة المستخدم - بحيث يرى كل مستخدم مجموعة من النتائج الفريدة الخاصة به.
نصائح أخرى
لتجنب كل صفحة (الناتجة عن طلب جديد) يحتمل وجود آخر المتكررة التي ستحتاج إليها لتخزين ترتيب المشاركات في مكان ما لاسترجاع على طلبات متعددة.
إذا كنت تريد لكل مستخدم أن يكون لها ترتيب عشوائي فريد ثم حفظ النظام في مجموعة دورة معرفات.
إذا كنت لا تمانع في جميع المستخدمين لها نفس ترتيب عشوائي ثم لديك عمود الموقف في الوظائف الجدول.
هل يمكن أن: النظام => RANDOM () على الاستعلام الأصلي بملءposts، ثم عند رقم الصفحات، لا تحديد الترتيب
اسمه نطاق على نموذج المشاركة الخاص بتغليف السلوك العشوائي:
class Post < ActiveRecord::Base
named_scope :random, :order => 'RANDOM()'
.
.
.
end
وكود PostsController
لديك ثم يصبح:
@posts = Post.random.paginate :page => params[:page]