使用will_paginate显示每页的项目

时间:2012-01-12 12:00:03

标签: jquery ruby-on-rails will-paginate

我已经使用了rails将paginate gem用于分页。我有一个下拉列表,允许用户选择每页的项目数。我希望我的分页能够显示每页多少项目。

为此,我从我的视图文件中调用了一个jquery,并对select标记进行了更改操作。

查看代码:

%table.treeTable
 %tbody
    - Ic.make_tree(@ics).values.each do |root|
      %tr{:id => root.tree_id, :class => "root"}
        %td= root.root_name
        - if show_check_boxes
          %td= check_box_tag "ic_glob", root.tree_id, false, :class => "ic_parent"
      - root.suites.each do |suite|
        %tr{:id => suite.tree_id, :class => "child-of-#{root.tree_id}"}
          %td= suite.suite_name
          - if show_check_boxes
            %td= check_box_tag "ic_glob", suite.tree_id, false, :class => "ic_parent"
        - suite.children.each do |case_item|
          %tr{:id => case_item.tree_id, :class => "child-of-#{suite.tree_id}"}
            %td= case_item.case_name
            - if show_check_boxes
              %td= check_box_tag "ic_glob", case_item.tree_id, false, :class => "ic_parent"
          - case_item.children.each do |ic|
            %tr{:id => ic.id, :class => "child-of-#{case_item.tree_id}"}
              %td= link_to ic.name, edit_ic_path(ic.id)
              - if show_check_boxes
                %td= check_box_tag "ic_ids[]", ic.id, false
  =will_paginate @ics

Ajax代码:

$('.ics_per_page').live('change',function(){
 $.ajaxSetup({beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content")); }});
  value1=($(this).val());
  $.post('/ics/index', {ics_per_page:value1});
  return false;
  })

从ajax我调用索引控制器。控制进入控制器内部,但重新加载没有发生。

控制器代码:

def index
   ics_per_page=params[:ics_per_page]||5
   ics_per_page=ics_per_page.to_i
   @ics = Ic.search(params[:root_name],params[:suite_name],params[:case_name],params[:name],'f').paginate(:per_page =>ics_per_page, :page => params[:all_ics])
   respond_to do |format|
      puts "inside index"
      format.html # index.html.erb
      format.xml  { render :xml => @ics }
    end
  end

请帮帮我。

谢谢, 拉姆亚。

2 个答案:

答案 0 :(得分:1)

好的,基本上是:XHR请求 - >控制器 - >行动 - >渲染视图作为返回值。

您需要致电您的控制器。这就是你已经做的。

其次,控制器检索的数据应该用于更新当前页面。为此,我会将您的respond_to扩展为:

respond_to do |format|
  format.js
end

表示JS请求将呈现index.js。{erb,rjs,...}处理程序。在此,您编写代码以更新视图。渲染的输出是您将在javascript中作为返回值接收的内容。

最后,您需要评估回复。

提示:您正在通过javascript调用索引操作。你应该用GET而不是POST来做这件事。

答案 1 :(得分:1)

Ajax请求无法重新加载页面。在页面中有一个不可见的表单,并在后台提交值的变化。

在页面中有一个不可见的表单。

<form action="/ics" method="get" style="display:none" id="change_number_of_ics">
  <input type="hidden" name="ics_per_page" id="num_of_items" value="" />
</form>

编写一个类似

的jquery回调
$('.ics_per_page').live('change',function(){
  value1= $(this).val();
  $("#num_of_items").attr("value", value1);
  $("form#change_number_of_ics").submit();
});