قم بترقيم الصفحات عبر قائمة عشوائية من منشورات المدونة باستخدام will_paginate

StackOverflow https://stackoverflow.com/questions/810267

سؤال

أريد أن أمنح المستخدمين القدرة على تصفح منشورات مدونتي بترتيب عشوائي.

لا أستطيع تنفيذها هكذا:

@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]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top