私が使用しているのは、次のようなブートストラップのページ付けです。
私のモデル:
class Customer < ActiveRecord::Base
attr_accessible :city, :country, :name, :street, :zip
//... more code
has_many :contacts, :dependent => :destroy, :autosave => true
end
class Contact < ActiveRecord::Base
attr_accessible :name, :notice, :phone
//... more code
belongs_to :customer
end
Gemfile:
gem "will_paginate-bootstrap"
部分的に、contacts/_pageable_contacts.html.erb でページ分割された出力を生成できます:
<%
contacts = contacts.to_a.paginate( :page => params[:page] || 1, :per_page => 5 )
%>
<%= render(:partial => 'contacts/contacts', :locals => {:contacts => contacts})%>
<%= will_paginate contacts, renderer: BootstrapPagination::Rails, remote: true %>
contact/create.js.erb 内での呼び出し:
<%
all = @contact.customer.contacts
%>
<%= render :partial => "contacts/pageable_contacts", :locals => { :contacts => all } %>
will_paginate によって生成されるリンクは、このパーシャルが Contacts コントローラー (例: views/contacts/create.js.erb) のコンテキストでレンダリングされている限り、次のようになります。
customers/3/contacts?page=1
customers/3/contacts?page=2
ここで、このパーシャルを customer/show.html.erb 内で次のようにレンダリングします。
<%= render :partial => 'contacts/pageable_contacts', :object => @customer.contacts, :as => :contacts %>
ただし、will_paginate によって返されるリンクは、連絡先固有ではなく顧客固有のものです。どうやら、will_paginate が self (CustomerController) にアクセスしてリンクを作成しているようです。
customers/3?page=1
customers/3?page=2
partial または will_paginate に対処方法を伝えるにはどうすればよいですか? MVC やルートなどの概念を誤解していませんか? モデル間の関連付けを間違った方法で使用していませんか?
どんな助けでも大歓迎です!ありがとうございます。ゴルビー