在应用程序中,有一个默认报告,用户可以看到列出某个电话的所有电话。但是,用户可以选择日期范围来对列表进行排序。这样做,一切正常,但当用户选择日期范围并更改为第二页时,日期范围将丢失,并返回到第二页的默认视图。
在我的控制器中,我正在检查是否正在传入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
答案 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
更改为您希望表单转到的任何页面。
这是未经测试的,但它应该让你朝着正确的方向前进。