will_paginate - 開始レコードを設定しますか?
-
27-09-2019 - |
質問
私は写真をいくつか持っているphoto_albumを持っています、ids: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の場合、上記のコードは、URLのように10時にウィルを開始したいときにレコード4で開始されます。
will_paginateで開始IDを設定する方法を知っている人はいますか?
ありがとう
アップデート
また、ページネーションリンクに気付くと、これがリンクされています。
/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_paginatingが表示され、ユーザーがクリックした写真のページ番号にデフォルトが表示されました
更新3-フローに基づくコントローラー
- プロジェクトごとのフォトアルバム - フォトアルバムインデックス
- 写真あたりの写真アルバム - フォトアルバムショー
- 写真ショー - 写真ショー
これは正しく聞こえますか?まだそれに、まだ運はありません。どんなアドバイスにも感謝します。
解決
として ジェシー 指摘されていると、使用する必要があります index
写真のリストを表示するためではありません show
, 、ページごとに1枚の写真しか表示されていない場合でも。
コントローラーでファインダーを使用すると、ビューでウィルパジネートオブジェクトが表示されます。
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}) %>
編集
OKありがとうございますが、アルバムに8枚の写真がある場合、「スタートレコード」の意味を表示し、ユーザーが写真4を表示した場合はどうですか。
アルバムビューのリンクにページ番号を追加できます。多分このようなもの:
<% @photos.each_with_index do |photo, index| do %>
<%= link_to "View photo",
photo_album_photos_path(@photo_album, :page => index) %>
<% end %>
他のヒント
なぜショー方法を使用しているのかわかりません。ページネーションを使用するには、Photoalbumコントローラーのインデックスメソッドに載る必要があります。
したがって、あなたのリンクはそうあるべきです
link_to('Show Photos', photo_album_path(@photo_album, page=>params[:page])
写真を1枚だけ見せたい場合は、クールですが、ページネーションを使用しないでください。
link_to('Photo), photo_album_photo_path(@photo_album, @photo))