2011-08-11 52 views
0

我想在給定的日期範圍內搜索數據。我有一個數據庫,具有名稱,場地,start_at和end_at的詳細信息。我可以通過在控制器中定義查找方法來搜索名稱和場所。以下是我的控制器代碼。如何在Ruby on Rails中查找日期範圍?

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

然後它會找到地點或名稱。但是,當我將start_at添加到此代碼中時,它將返回一個異常。我怎樣才能從數據庫中搜索相關的日期範圍?任何人都可以幫我嗎?我使用postgresql和紅寶石1.8.7和rails 2.3.8版本。

我改變了我的查找方法如下...

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語句添加到我的代碼中。有誰能幫我糾正第二部分嗎?我在搜索文本框中輸入日期。但它不會檢索任何數據。

+1

什麼例外?以及你如何將'start_at添加到此代碼中? – fl00r

+0

start_at是日期變量我添加這個爲def查找 @ events = Event.find(:all,:conditions => [「venue =?OR name =?OR start_at =?」,params [:search_string],params [ :search_string] ,, params [:search_string]]) end – Rosh

+0

start_at在你的例子中是一個STRING不是日期。 – fl00r

回答

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。那我該怎麼做?需要您的幫助更多....

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]]) 

注意,條件給出作爲一個數組。

+0

它不工作...再次我得到異常。未定義的方法'where'for# Rosh

+0

如何發佈該異常? :) – socjopata

+0

是的,@八達通保羅給你Rails 3.x例子 – socjopata