Предположим, у нас есть несколько диапазонов дат, например:
ranges = [
[(12.months.ago)..(8.months.ago)],
[(7.months.ago)..(6.months.ago)],
[(5.months.ago)..(4.months.ago)],
[(3.months.ago)..(2.months.ago)],
[(1.month.ago)..(15.days.ago)]
]
и модель Post
с атрибутом :created_at
.
Я хочу найти сообщения, в которых значение created_at
находится в этом диапазоне, поэтому цель состоит в том, чтобы создать запрос, например:
SELECT * FROM posts WHERE created_at
BETWEEN '2011-04-06' AND '2011-08-06' OR
BETWEEN '2011-09-06' AND '2011-10-06' OR
BETWEEN '2011-11-06' AND '2011-12-06' OR
BETWEEN '2012-01-06' AND '2012-02-06' OR
BETWEEN '2012-02-06' AND '2012-03-23';
Если у вас есть только один диапазон, подобный этому:
range = (12.months.ago)..(8.months.ago)
мы можем сделать этот запрос:
Post.where(:created_at => range)
и запрос должен быть:
SELECT * FROM posts WHERE created_at
BETWEEN '2011-04-06' AND '2011-08-06';
Есть ли способ сделать этот запрос, используя такую запись Post.where(:created_at => range)
?
И как правильно построить этот запрос?
Спасибо