Это из документации Rails 3.1.0:
Обратите внимание, что области видимости, определенные с помощью области видимости, будут оцениваться, когда они определены, а не когда они используются. Например, следующее будет неверным:
class Post < ActiveRecord::Base
scope :recent, where('published_at >= ?', Time.now - 1.week)
end
Приведенный выше пример будет «заморожен» до значения Time.now, когда класс Post был определен, и поэтому результирующий SQL запрос всегда будет одинаковым. Правильный способ сделать это - использовать лямбду, которая будет переоценивать область видимости каждый раз, когда она вызывается:
class Post < ActiveRecord::Base
scope :recent, lambda { where('published_at >= ?', Time.now - 1.week) }
end
Итак, вы можете попробовать обновить свою область, чтобы использовать лямбда как второй аргумент вместо where
:
scope :current_availables, -> { where(date: Date.current.beginning_of_day..Date.current+14.days) }
(Не уверен, можно ли использовать ->
, если нет, lambda
)
Вы также можете использовать 14.days.from_now
вместо добавления 14 дней к Date.current
.