如何在Rails中搜索一系列日期?

时间:2011-01-29 00:41:29

标签: ruby-on-rails model-view-controller erb

我编写了一个Rails控制器函数,用于查询MySQL数据库,查找在特定日期范围内添加的条目。例如以下内容:

    @foos = FooTableModel.where(created > ? AND created <= ?', DateTime.new(2011, 1, 26), DateTime.new(2011, 1, 29))

此查询非常适合我的目的。但是,我想要做的是允许用户设置他们想要的日期范围而不是明确设置它。我在某种程度上探讨了erb文件,并且我在访问数据方面取得了巨大的成功,我对改变我要求显示的数据感兴趣。

是否有任何类似于我想要实现的例子?我认为这是Rails开发人员希望让用户做的相当普遍的事情,但我对潜在客户没有太多好运。

1 个答案:

答案 0 :(得分:2)

您的表单代码在哪里?

这是一个标准的REST表单:

<% form_tag(foo_path) do %>
   <% select_date :start_date %>
   <% select_date :end_date %>
   <%= submit_tag "Submit", :disable_with => "Submitting..." %>
<% end %>

然后在您的控制器中,您可以使用参数来搜索这些日期。

start_date = params[:start_date]
end_date = params[:end_date]

请记住foo_path需要保持平静的路线。如果不是,则需要传递哈希{:controller => 'foo', :action => "find"}

在您的控制器中,您可以执行以下操作:

def index
   if params[:start_date] && params[:end_date]
       start_date = params[:start_date]
       end_date = params[:end_date]
       @foos = Foo.find(:all, :conditions => ['created_at BETWEEN ? AND ?,' start_date, end_date
   end
   responds_to do |format|
       format.html
   end  
end