Will_paginate - تعيين سجل البداية؟
-
27-09-2019 - |
سؤال
لديّ photo_album يحتوي على العديد من الصور ، معرفات: 4،9،10،11،31 - كل شيء لـ photo_album: 3
لدي ما يلي لعرض DEF الخاص بي في وحدة تحكم الصور الخاصة بي:
@photo = @photoalbum.photos.order("created_at ASC").paginate :page => params[:page], :per_page => 1
المشكلة هي ، إذا كان عنوان URL هو:/photo_albums/3/photos/10 ، يبدأ الرمز أعلاه في السجل 4 ، عندما أريد أن يبدأ الإرادة في 10 ، كما هو الحال في عنوان URL.
أي شخص يعرف كيفية تعيين معرف البداية في will_paginate؟
شكرًا
تحديث
أيضا ، لاحظ أن روابط ترقيم الصفحات تقدم رابط هذا:
/photos/10?page=2&photo_album_id=3
عندما يجب أن يكونوا مثل:
/photo_albums/3/photos/?page=2
هل هذا صحيح؟
ها هي معلومات النموذج:
class PhotoAlbum < ActiveRecord::Base
has_many :photos, :dependent => :destroy
class Photo < ActiveRecord::Base
belongs_to :photo_album
تحديث 2 - تدفق المستخدم المطلوب ...
- #1 - يرى المستخدم قائمة ألبومات الصور
- #2 ، ينقر المستخدمون على ألبومات صور
- #3 المستخدم شاهد قائمة بالصور في الألبوم
- #4 استخدم طرق العرض الصورة التي تم النقر فوقها ولكن لديها عرض Will_Paginate وافتراضي على رقم الصفحة للصورة التي نقرها المستخدم
تحديث 3 - وحدات التحكم بناءً على التدفق
- ألبومات الصور لكل مشروع - فهرس ضوئي
- صور لكل ألبوم صور - عرض ضوئي
- عرض الصور - عرض الصور
هل هذا صحيح؟ لا يزال في ذلك ، لا حظ بعد. نقدر أي نصيحة.
المحلول
كما جيسي أشارت ، يجب أن تستخدم index
لعرض قائمة من الصور ، لا show
, ، على الرغم من أنك تعرض صورة واحدة فقط لكل صفحة.
يمنحك استخدام الباحث في وحدة التحكم الخاصة بك كائن WillPaginate في عرضك:
def index
@photos = @photoalbum.photos.order("created_at ASC").paginate :page => params[:page],
per_page => 1
end
في العرض ، يعرف Will_Paginate عن علاقة HAS_MANY ، لذلك سيتضمن المعاملات الخاصة بـ Photo_album الأصل
<%= will_paginate(@photos) %>
يجعل الرابط التالي على النحو التالي:
/photos?page=2&photo_album_id=3
ربما توقعت /photo_albums/3/photos?page=2
, ، لكن Will_Paginate لا يستخدم مسار المورد المتداخل. هذا جيد ، لأن عنوان URL ينتهي في نفس المكان ، أي { :controller => :photos, :action => :index, :photo_album_id => 3 }
يمكنك المرور في الوالد بشكل صريح للتجاوز إذا لزم الأمر:
<%= will_paginate(@photos,:params => {:photo_album_id => 3}) %>
مزيد من المعلومات في will_paginate docs
تعديل
حسنًا ، شكرًا ولكن ماذا عن عرض "سجل بدء" يعني ما إذا كان الألبوم يحتوي على 8 صور ، ونقر فوق المستخدم لمشاهدة الصورة 4 ، وكيفية إظهار تلك الصورة في ترتيب الترقيم الصحيح ، باستخدام الفهرس؟
يمكنك إضافة رقم الصفحة إلى الرابط في عرض الألبوم. ربما شيء من هذا القبيل:
<% @photos.each_with_index do |photo, index| do %>
<%= link_to "View photo",
photo_album_photos_path(@photo_album, :page => index) %>
<% end %>
نصائح أخرى
لست متأكدًا من سبب استخدام طريقة عرض. لاستخدام ترقيم الصفحات ، يجب أن تكون على طريقة فهرس وحدة التحكم الضوئية.
لذلك يجب أن تكون روابطك
link_to('Show Photos', photo_album_path(@photo_album, page=>params[:page])
إذا كنت ترغب في إظهار صورة واحدة فقط ، بارد ، ولكن لا تستخدم ترقيم الصفحات.
link_to('Photo), photo_album_photo_path(@photo_album, @photo))