ruby on rails将在日期之间分页

时间:2009-08-17 20:18:42

标签: ruby-on-rails

在应用程序中,有一个默认报告,用户可以看到列出某个电话的所有电话。但是,用户可以选择日期范围来对列表进行排序。这样做,一切正常,但当用户选择日期范围并更改为第二页时,日期范围将丢失,并返回到第二页的默认视图。

在我的控制器中,我正在检查是否正在传入date_range参数。如果不是,我会显示整个列表,如果是,则显示特定日期范围之间的记录。

问题是,当我点击新页面时,新参数不包括应该使用的旧日期范围。

我该如何做到这一点,我正在考虑做一些类级别的变量测试,但这不符合我的想法。而且我很困难。

我没有正确的代码在我面前,但如果我没记错的话就是这样:

<% form for :date_range do |f| %>
    <%= f.calendar_date_select :start %>
    <%= f.calendar_date_select :end %>
    <%= f.Submit %>
<% end %>

在控制器中,它类似于:

if params[:date_range] == nil
    find the complete listings without a date range
else
    find the listings that are within the date range
end

2 个答案:

答案 0 :(得分:0)

你可以修改link_to(假设你是如何浏览页面的),以便它传递date_range参数。

= link_to 'Next', @whatever_path, :date_range => @date_range 

可以通过捕获实例变量中的参数来在控制器中设置@date_range。

但可能有更好的解决方案。

答案 1 :(得分:0)

主要问题是您在提交表单时使用的是POST请求,但是-paginate会使用GET请求。您还应该使用form_tag而不是form_for,因为form_for会将字段嵌套在散列中,这是GET无法实现的。

<% form_tag items_path, :method => 'get' do %>
  <%= calendar_date_select_tag :start_date %>
  <%= calendar_date_select_tag :end_date %>
  <%= submit_tag "Submit", :name => nil %>
<% end %>

然后直接检查params[:start_date]params[:end_date]。您需要将items_path更改为您希望表单转到的任何页面。

这是未经测试的,但它应该让你朝着正确的方向前进。