Ruby на самом деле имеет диапазоны . Используйте их.
class Referral < ActiveRecord::Base
def self.created_between(range = Date.today.beginning_of_day..Date.today.end_of_day)
where(created_at: range)
end
end
Все, что все забывают о scope
, это то, что он просто syntacti c сахар для создания методов класса в одной строке. Любые аргументы, которые вы добавляете в блок / лямбду, будут аргументами метода.
Но если ваш метод принимает аргументы, он, вероятно, не умещается в одну строку приличной длины. Таким образом, вы не должны использовать scope
в первую очередь. Хотя вы можете писать многострочные методы с областью видимости, это совершенно бессмысленный уровень метапрограммирования, поскольку он занимает ровно столько же строк и менее читабелен и не может быть обнаружен инструментами, которые не могут найти динамически генерируемые методы.