2015-07-13 80 views
3

我在我的參數中收到日期並搜索數據庫以查看日期是否在開始日期和結束日期之間。我的代碼如下。在導航欄中的兩個日期之間搜索activerecord

date = params[:date] 

    record = Campaign.where(['start_date < ? AND end_date > ?', date, date]) 

這隻返回每個記錄名稱。但是,當我嘗試訪問完整記錄時,如其id,rails會引發錯誤。

我不明白我在做什麼錯。

+2

你在最後用'first'運行嗎?請發佈你的錯誤。 –

+0

每當遇到錯誤時,最好包含該錯誤的確切文本。我與@TheShalit在這一個。看起來你已經獲得了ActiveRecord關係,而不是你認爲應該獲得的單個ActiveRecord對象。將'.first'添加到查詢的末尾。 – MarsAtomic

+0

它正在返回所需的輸出,它只是在一個ActiveRecord_Relation對象中。你需要把你的記錄帶出對象。如果你需要所有的對象,你需要遍歷關係並訪問ID,如果你只需要一個對象,你可以根據用例使用'.first'方法或'.last'方法。 –

回答

3
Campaign.where(
    "created_at >= :start_date AND created_at <= :end_date", 
    { start_date: params[:start_date], 
    end_date: params[:end_date]} 
) 

希望它能幫上忙。

13

試試這是用於檢查兩個日期之間日期的rails格式。

start_date = params[:start_date].to_date.beginning_of_day 
end_date = params[:end_date].to_date.end_of_day 
records = Campaign.where(:created_at => start_date..end_date) 

它會返回在指定日期範圍內創建的廣告系列。

希望它會有所幫助。

5

你查詢應該是這樣的(請注意沒有方括號,你在查詢中包含的。

date = params[:date] 
record = Campaign.where('start_date < ? AND end_date > ?', date, date) 

之間它的起始日期日期和結束日期這將返回廣告活動其中的日期落在數組因此,你不能只是說record.id因爲記錄實際上是運動對象的數組。

相反,嘗試通過結果循環訪問單個元素活動的陣列中。

record.each do |record_object| 
    # perform some action on each record_object here 
end