ActiveRecord :: Относительная проблема проверки на ноль? - Рельсы 3.1 - PullRequest
1 голос
/ 07 ноября 2011

В следующем запросе я получаю объекты в качестве возвращаемого значения (и, таким образом, проверяя отсутствие результатов, используя .nil? , работает отлично:

  store = Store.where(:some_id => myobj.some_id.to_i).first
  unless store.nil?

Но в следующем коде я получаювозвращаемый тип ActiveRecord :: Отношение и проверка с использованием .nil? не удается!

existing_store = Store.where(:some_str => myobj.some_str).not_hidden().active()
if existing_store.nil?

1. Почему это так?

2. Как я могу проверить отсутствие результатов в этом случае?

3. Как я могу проверить отсутствие записей вообще при использовании find () или where ()

Rails 3.1 действительно привел в замешательство.

Ответы [ 2 ]

7 голосов
/ 07 ноября 2011

use blank?, nil? - true, если это действительно nil (один экземпляр NilClass), но ваш второй пример всегда будет возвращать массив, может быть пустой, если результатов нет, но Массив тем не менее. blank? проверяет наличие пустых массивов, пустых строк, значений nil и false.

Если у вас есть проблемы с blank?, который не работает должным образом, вы можете проверить на first.nil?

3 голосов
/ 07 ноября 2011

Поскольку в первом случае вы пытаетесь проверить экземпляр во втором разделе, который вы получили Array, а массив не равен nil, он равен Array, даже если он пустой.Вы должны использовать empty?, чтобы проверить это!

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