如何在Ruby on Rails中找到日期范围?

时间:2011-08-11 11:20:21

标签: ruby-on-rails ruby

我想在给定的日期范围内搜索数据。我有一个数据库,其中包含name,venue,start_at和end_at的详细信息。我可以通过在控制器中定义find方法来搜索名称和地点。以下是我的控制器代码。

def find
  @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]])
end

然后它会找到地点或名称。但是当我将start_at添加到此代码中时,它将返回异常。如何从数据库中搜索相关日期范围?任何人都可以帮助我吗?我正在使用postgresql和ruby 1.8.7以及rails 2.3.8版本。

我改变了我的find方法如下......

def find    
  if (params[:search_string])
    @events=Event.find(:all, :conditions=>["venue = ? OR name = ?", params[:search_string], params[:search_string]])
  else 
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?",  params[:start_at], params[:end_at]])
  end
end                                                           

首先if语句是否正常工作。但是其他部分不起作用。没有例外。它不会从数据库中检索与日期相关的数据。由于没有检索数据,我将此if语句添加到我的代码中。任何人都可以帮我纠正这第二部分吗?我在搜索文本框中输入日期。但它不会检索任何数据。

2 个答案:

答案 0 :(得分:0)

看看http://guides.rubyonrails.org/active_record_querying.html 尝试类似:

@events = Event.where("(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at])

修改

在Rails 2.3.x中,它应该是

@events = Event.all(:conditions => ["(venue = ? OR name = ?) AND start_at >= ? AND end_at <= ?", params[:search_string], params[:search_string], params[:start_at], params[:end_at]])

请注意,条件是以数组形式给出的。

答案 1 :(得分:0)

我可以找到一种在给定日期范围内搜索数据的方法。我是单独完成的。我在布局中创建了两个text_field_tag并创建了控制器代码,如下所示。

    def find
    @events= Event.all(:conditions => ["start_at >= ? AND end_at <= ?",  params[:search], params[:search_string]])

    end

然后我在布局中添加了以下代码。

    <span style="text-align: right">
    <% form_tag "/events/find" do %>
    <%= text_field_tag :search%>
    <%= text_field_tag :search_string %>
    <%= submit_tag "search" %>
    <% end %>
    </span>

我从数据库中获取数据..现在我想将这两者结合起来。按日期范围查找数据需要两个text_field_tag,并且按名称查找数据只需要一个text_field _tag。那我该怎么做呢?需要你的帮助更多....