2014-12-13 64 views
1

我在Rails應用程序上使用具有耐嚼的GEM的ElasticSearch。我會幫助一些翻譯:耐嚼寶石 - 查詢獲取包含特定日期的日期範圍

all.select { |task| 
(task.start_at.to_date..task.end_at.to_date).cover?(Date.today) 
} 

使用耐嚼的過濾器。我試着長時間做這項工作,但沒有成功。

任何形式的幫助都會很棒。

謝謝

回答

0

此代碼迭代集合「全部」。對於它檢查的每個項目,如果today是在任務的執行時間範圍內(它的當前日期介於begin_at和end_at範圍之間),即如果任務應該執行,則返回true。

+0

是的,這就是代碼的作用。我會將其翻譯爲elasticsearch查詢。 – elf 2014-12-13 12:49:10

+0

UsersIndex.filter {〜(start_at.to_date <= Date.today)&(end_at.to_date> = Date.today)} – 0e1val 2014-12-13 13:31:02

0

我知道它是一個漫長的時間,但我現在與耐嚼的寶石的工作,所以這裏有雲:

假設你有一個TasksIndexstart_at和良好定義爲date類型end_at領域,用正確的format

field :start_at, type: 'date', format: 'basic_date_time_no_millis' # example, you can use other formats 
field :end_at, type: 'date', format: 'basic_date_time_no_millis' 

那麼你的過濾器可以是這樣的:

def tasks_including_date(target_date) 
    formatted_target_date = target_date.strftime('%Y-%m-%d') 
    TasksIndex.filter{start_at <= formatted_target_date}.filter{end_at >= formatted_target_date} 
end 

那麼你可以:

tasks_including_date(Date.today) 

如果你想要的結果本身,而不是僅僅是過濾範圍,只是對結果使用to_ary。它會處理你的結果。