0

我看过关于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的方式吗?

4

0 回答 0