Как мы можем добавить параметры по умолчанию в области видимости модели в рельсах? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть следующая область в моей модели.

class Referral < ActiveRecord::Base
  scope :date_range, -> (start_date,end_date) { where("created_at <= ? AND created_at >= ?", start_date, end_date) }
end

calling like this :- Referral.date_range(Date.today,Date.today)

Как мы можем изменить эту область так, чтобы она принимала текущую дату в качестве даты начала и окончания в случае, если мы не передадим какую-либо параметры при вызове.

1 Ответ

0 голосов
/ 15 февраля 2020

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 в первую очередь. Хотя вы можете писать многострочные методы с областью видимости, это совершенно бессмысленный уровень метапрограммирования, поскольку он занимает ровно столько же строк и менее читабелен и не может быть обнаружен инструментами, которые не могут найти динамически генерируемые методы.

...