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