سؤال

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