2009-06-19 3 views
0

У нас есть элемент управления сеткой, который позволяет пользователю фильтровать текст в разных полях. В число таких полей могут быть отметки времени, такие как created_at и updated_at.Фильтрация по дате подстроки в Rails

Теперь пользователь может сделать много различных типов фильтров, в том числе>, <,> =, = < и т.д. Таким образом, запрос, который попадается из-под контроля может выглядеть следующим образом:

«created_at> 2009 ", или" created_at> = 2006 и created_at < = 2010 ".

База данных не распознает годы как действительные временные метки, и рельсы автоматически не преобразуют их как таковые. Есть ли какие-либо плагины или идиоматические способы сделать год или, еще лучше, часть метки времени, наилучшим образом догадаться о значении и преобразовать ее в метку времени использования полезной базы данных?

ответ

3

Взгляните на следующие проекты

Например, searchlogic поддерживает условия как следующего.

Post.all(:conditions => { :hour_of_created_at => 9 }) 
+0

searchlogic выглядит mintox - Я думаю, что он будет делать то, что нужно здесь, хотя я не реализовали еще себя. – mlambie

2

created_at> 2009

Post.all(:conditions => ["created_at > ?", Date.new(y = 2010, m = 1, d = 1).to_s]) 

created_at> = 2006

Post.all(:conditions => ["created_at >= ?", Date.new(y = 2006, m = 1, d = 1).to_s]) 

created_at < = 2010

Post.all(:conditions => ["created_at <= ?", Date.new(y = 2010, m = 12, d = 31).to_s]) 

Возможно, что-то подобное?

1

вы можете использовать класс Time рубина

Time.local(2010) # => Fri Jan 01 -0600 2010 

или

Time.gm(2010) # => Fri Jan 01 00:00:00 UTC 2010 
Смежные вопросы