ОК, поэтому я подумал, что следующий код по существу преобразует целочисленное значение в логическое при вызове метода с областью действия.
:no_wifi_restrictions, ->{ where(wifi_restrictions: 0) }
Так что я подумал, что, если я отправлю свои параметры no_wifi_restrictions = true, он вернет все экземпляры CoffeeShop, которые теперь возвращаются, если я ищу в консоли:
CoffeeShop.no_wifi_restrictions.
Однако это не так. Потому что в моих параметрах он передает значение. Поэтому, когда я пытаюсь это сделать, с параметром "true" я получаю:
wrong number of arguments (given 1, expected 0)
Я нашел следующее решение:
scope :no_wifi_restrictions, -> hours { where(wifi_restrictions: hours) }
, который также можно записать так:
scope :no_wifi_restrictions, -> hours { where("wifi_restrictions = ?", hours) }
Это позволяет передавать аргумент в область (часы). Так что в этом случае я передаю ему значение «0» в параметрах, и он будет запускать следующее:
CoffeeShop.where(wifi_restrictions: 0)
По сути, значение «часы» не нужно для моих нужд, потому что я действительно не хочу или не нуждаюсь в аргументе, просто я должен предоставить значение в параметрах (если я не ошибаюсь, я также пытался удаление атрибута значения, но это приводит к значению по умолчанию «on»).
Следовательно, следующее также будет работать, даже если переданный аргумент по существу избыточен:
scope :no_wifi_restrictions, -> hours { where("wifi_restrictions = 0", hours) }
В этом случае я мог бы действительно дать любое значение в параметрах, например:
value="this_is_a_useless_param"
... и он все еще будет работать, потому что все, что ему нужно, это передать аргумент в область действия.
Возможно, кто-то знает более аккуратный способ достижения этого, но сейчас это сработало для меня.