Почему область поиска find_by возвращает массив, если результат равен нулю - PullRequest
2 голосов
/ 20 января 2020

В моей модели есть область действия:

scope :default_template, ->(template_type) { find_by(is_default: true, template_type: template_type) }

Я использую find_by, но проблема заключается в том, что при отсутствии записи результатом области является пустой массив вместо nil.

EmailTemplate.default_template('blahblah')  # => []

Может кто-нибудь объяснить, почему?

1 Ответ

5 голосов
/ 20 января 2020

Это указано в документах :

... Если возвращается nil или false, вместо него возвращается вся область.

Для того чтобы ваша область видимости была компонуемой, она должна возвращать ActiveRecord :: Relationship, и если ни одна запись не удовлетворяет заданным критериям, возвращается пустой ActiveRecord :: Relationship. Это гарантирует, что дальнейшие вызовы области в модели не вызовут NoMethodError при вызове их для результата nil.

Если вам действительно нужно вернуть nil, тогда сделайте свою область видимости методом класса. Это сохранит исходное возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...