Когда я выбираю пользователя из базы данных, как я должен проверить на ноль? - PullRequest
0 голосов
/ 14 марта 2011

Если я пытаюсь получить запись из БД, например:

@user = User.find_by_user_name("blah")

Как проверить, было ли значение пустым? то есть запись была найдена?

И я должен использовать and или &&, поскольку они кажутся разными?

if @user and @user.age > 0
  ....
end

Ответы [ 5 ]

1 голос
/ 14 марта 2011
if @user
  # not nil
else
  # nil
end

должно быть достаточно, чтобы проверить, не было ли значение ноль.

И разница между && и 'and' в том, что && имеет более высокий приоритет над 'и'.Смотри здесь

0 голосов
/ 14 марта 2011

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

Так как@user = User.find_by_user_name("blah") оценивается как nil, если пользователь не найден, я лично предпочитаю следующую идиому Ruby:

if @user = User.find_by_user_name("blah")
  # do stuff with @user
else
  # not found
end
0 голосов
/ 14 марта 2011

@ user будет nil, если он не был найден, как предложено.Конечно, вы можете явно проверить nil следующим образом:

@user.nil?
@user === nil

nil фальсифицирует оператор if, например false.См. NilClass и FalseClass для различий.

0 голосов
/ 14 марта 2011

Если записи нет, @user будет равен нулю, поэтому проверка if сработает.

Разница между && и и является приоритетом.&& имеет более высокий приоритет.

0 голосов
/ 14 марта 2011

Это вызовет исключение, если значение равно нулю:

@user = User.find_by_user_name!("blah")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...