Pagination with AJAXで railscasts を見てきました。ネストされたモデルを使用して彼の方法を複製しようとしています。子モデルのビューや完全に統合されたコントローラーがないため、混乱しているようです。
製品に has_many のコメントがあるとします。商品ビュー内のコメントで will_paginate を使用して同じページネーションを行うにはどうすればよいですか?
アップデート:
これが私の試みのほとんどです(私の試みは実際にはkaminariを使用していますが、基本的にはwill_pagenateと同じです):
ビュー/製品/コメント/_index.html.erb:
<div id="comments">
<% comments.each do |comment| %>
<%= f.fields_for :comments, comments do |comment_builder| %>
<%= render 'products/comments/field', f: comment_builder %>
<% end %>
<% end %>
<%= paginate comments %>
</div>
ビュー/製品/コメント/_field.html.erb:
<fieldset>
<%= f.hidden_field :_id, :value => f.object._id %>
<%= f.hidden_field :_destroy %>
<%= f.object.text %>
<%= link_to "remove", '#', class: "remove_field" %>
</fieldset>
ビュー/製品/コメント/_index.js.erb:
$("#comments").html("j render("products/comments/index")) %>");
assets/javascripts/product.js
$('.pagination a').live
click: ->
$(".pagination").html("Page is loading...")
$.getScript(this.href)
false
controllers/comments_controller.rb
class CommentsController < ApplicationController
before_filter :get_product
def index
@comments = @product.comments.desc(:created_at).page(params[:page]).per(10)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @comments }
end
end
private
def get_product
@product = Product.find(params[:product_id]) if params[:product_id]
redirect_to root_path unless defined?(@product)
end
end
views/products/show.html.erb (抜粋)
<%= render "products/comments/index", f: f, comments: @comments%>
コントローラー/products_controller.rb
def show
@product = Product.find(params[:id])
@comments = @product.comments.desc(:created_at).page(params[:page]).per(1)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @product }
end
end
view/products/comments/_index.js.erb が呼び出されることはありません。また、これを行うよりレールのような方法はありますか?