質問

私は写真をいくつか持っている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}) %>

の詳細 will_paginate docs

編集

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))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top