我想在给定的日期范围内搜索数据。我有一个数据库,其中包含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语句添加到我的代码中。任何人都可以帮我纠正这第二部分吗?我在搜索文本框中输入日期。但它不会检索任何数据。
答案 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。那我该怎么做呢?需要你的帮助更多....