Will_Paginate --- Установить стартовую запись? - PullRequest
0 голосов
/ 30 октября 2010

у меня есть фотоальбом который имеет несколько фотографий, ID: 4,9,10,11,31 - все для photo_album: 3

У меня есть следующее для моего DEF SHOW в контроллере Photos:

@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?

Спасибо

UPDATE

Кроме того, заметив, что ссылки PAGINATION отображают ссылку на это:

/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 - контроллеры на основе потока

  • фотоальбомов на проект - индекс фотоальбома
  • фотографий в фотоальбоме - PhotoAlbum Show
  • Фотовыставка - Photo Show

Это звучит правильно? Все еще в этом, нет удачи еще. Цени любой совет.

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Как указал Джесси , вы должны использовать 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

EDIT

OK Спасибо, но как насчет показа «НАЧАТЬ ЗАПИСЬ» означает, если альбом имеет 8 фотографий, и пользователь нажимает на см. фото 4, как мне показать это фото в правильном порядке нумерации страниц, используя ИНДЕКС?

Вы можете добавить номер страницы к ссылке в представлении альбома. Может быть, что-то вроде этого:

<% @photos.each_with_index do |photo, index| do %>
  <%= link_to "View photo",
    photo_album_photos_path(@photo_album, :page => index) %>
<% end %>
0 голосов
/ 31 октября 2010

Я не уверен, почему вы используете метод Show.Чтобы использовать разбиение на страницы, вы должны использовать метод Index контроллера PhotoAlbum.

, поэтому ваши ссылки должны быть

link_to('Show Photos', photo_album_path(@photo_album, page=>params[:page])

Если вы хотите показать только одну фотографию, круто, но неt использовать нумерацию страниц.

link_to('Photo), photo_album_photo_path(@photo_album, @photo))
...