我看过关于Pagination with AJAX的 railscasts 。我正在尝试使用嵌套模型复制他的方法。我似乎很困惑,因为我没有子模型或完全集成的控制器的视图。
假设产品 has_many Comments。如何使用 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")) %>");
资产/javascripts/product.js
$('.pagination a').live
click: ->
$(".pagination").html("Page is loading...")
$.getScript(this.href)
false
控制器/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
意见/产品/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 永远不会被调用。还有一种更像rails的方式吗?