使用搜索逻辑的日期条件

Rails插件 – 来自二进制逻辑的Searchlogic – 提供按日期过滤的function。 我的表单设置如此……

  

但是,我从控制器中生成的@search对象返回的日期…

 @search = Task.with_member(current_user).search(params[:search]) 

生成一个看起来像这样的日期参数

 {:due_at_after=>Sat, 31 Oct 2009 20:00:00 EDT -04:00} 

使用这两种格式,表单不会显示所选的下拉列表。 看起来searchlogic对象中的格式也使用了时区调整时间。

有关如何处理这个的任何想法?

您的问题的很大一部分似乎正在发生,因为您正在将字符串转换为日期,并追溯到字符串。 我相信你可能会比你需要的更多。

HTML表单并不真正“理解”日期 – 它们只是“理解”字符串。 所以可以传递它们的字符串而不是日期。 换句话说,可以删除to_date

 <% form_for @search do |f| %> <%= f.label :start %> <%= f.select :due_at_after, ['November', '2009-11-01'],['December', '2009-12-01']], :include_blank => true %> 
<%= f.label :end %> <%= f.select :due_at_before, [['December', '2009-12-01'],['January', '2010-01-01']], :include_blank => true %> <%= f.submit 'Search' %> <% end %>

另外,我更喜欢使用:include_blank => true而不是[['','']] (在我看来更易于阅读),我使用了一个封闭的标签(标准的html东西 – 也许你做的一个错字?)。

顺便说一下,如果要指定Date,可以使用Date构造函数。 写入和执行速度比创建字符串和解析日期更快。

 #Date(2009,11,1) is faster, shorter, and equivalent Date(2009,11,1) == '2009-11-01'.to_date # --> true 

你想找一个月的记录吗? 看看我的by_star gem /插件。