【发布时间】:2015-10-13 21:36:11
【问题描述】:
有没有办法让结果在will_paginate 页面中持续存在?我正在使用bootstrap-datepicker-rails 列出给定范围内的报告,它会发布一个范围的结果,但是当我单击第 2 页链接时,它会恢复到没有该范围的第 2 页上的结果。
这是我所拥有的:
views/reports/index.html.erb
<%= render partial: "pages/navigation" %>
<div class="row reports">
<div class="col-md-2 sidebar no-float">
<h3 class="text-center">Select Date Range</h3>
<div class="input-daterange input-group" id="datepicker">
<%= form_tag reports_index_path, method: :post, :class => "form-inline" do %>
<div class="form-group">
<%= label_tag "Start Date:" %>
<%= text_field_tag(:start_date, @reports.blank? ? '' : params[:start_date], class: "form-control", name: "start_date", data: {"behaviour" => "datepicker"}) %>
<p class="text-center">to</p>
<%= label_tag "End Date:" %>
<%= text_field_tag(:end_date, @reports.blank? ? '' : params[:end_date], class: "form-control", name: "end_date", data: {"behaviour" => "datepicker"}) %>
</div>
<br/>
<br/>
<%= submit_tag "Update", class: "update-button" %>
<% end %>
</div>
</div>
<div class="col-md-10 report-list no-float">
<h2 class="text-center">Reports Archive</h2>
<% @reports.in_groups_of(3).each do |group| %>
<ul id="report-list list">
<% group.each do |report| %>
<div class="col-md-4">
<li class="report">
<div class="report-header">
<p>
<span class="report-data"><%= report.name %></span>
</p>
</div>
<p class="report-text"><%= report.range %></p>
<p class="report-text"><%= link_to "Download", report.pdf.url, target: "_blank" %></p>
</li>
</div>
<% end %>
</ul>
<% end %>
</div>
</div>
<!-- </div> -->
<div class="pagination-wrapper">
<%= will_paginate @reports, :previous_label => "Newer", :next_label => "Older", :params => { :start_date => params[:start_date], :end_date => params[:end_date] } %>
</div>
<%= render partial: "pages/footer" %>
controllers/reports_controller.rb
class ReportsController < ApplicationController
def index
@company = current_user.company
@locations = if @company
current_user.company_locations.order(:name)
else
[]
end
unless @company.nil? || @company.reports.empty?
if request.post?
@reports = @company.reports.where(created_at: report_params[:start_date]..report_params[:end_date]).order(created_at: :asc).paginate(page: params[:page], :per_page => 30)
else
if params[:start_date].present? && params[:end_date].present?
@reports = @company.reports.where(created_at: (report_params[:start_date]..report_params[:end_date])).order(created_at: :desc).paginate(page: params[:page], :per_page => 30)
else
@reports = @company.reports.order(created_at: :desc).paginate(page: params[:page], :per_page => 30)
end
end
end
end
private
def report_params
params.permit(:start_date, :end_date)
end
end
这是固定的所以,默认情况下,如果请求不是 post,我会加载所有可用的报告,我认为这是问题,因为点击第 2 页不是发帖。
这不是固定的每当我在定义范围后单击最后一页时,它总是返回错误,即使仍有记录要显示。
这是加载时默认页面的样子(尚未指定范围):
这就是我在第 1 页上定义 (5/1/15 - 7/1/15) 范围时的样子:
第 2-10 页正常工作:
但是最后一页总是这样,好像 will_paginate 出于某种原因添加了一个额外的页面:
【问题讨论】:
-
您的过滤以
POST提交,当您单击分页链接时它不存在。您可以在GET中提交过滤器表单并将其保留在 will_paginate 链接中。您可以自定义LinkRenderer以持久化查询参数。 -
在任何地方都有这样做的例子吗?是
will_paginate覆盖,还是整个应用程序?
标签: jquery html ruby-on-rails twitter-bootstrap activerecord