Почему твой код не работает?
В where
методе возвращает ActiveRecord :: Отношение объект (действует как массив , который содержит результаты этого where
), он может быть пустым , но он никогда не будетnil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
Как проверить, существует ли хотя бы одна запись?
Вариант 1: Использование.exists?
if Business.exists?(user_id: current_user.id)
else
end
Вариант 2. Использование .present?
(или .blank?
противоположность .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
Вариант 3: присвоение переменной в инструкции if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
Некоторые линтеры (например, Rubocop) считают этот вариант запахом кода.
Вариант 3b: присвоение переменной
business = Business.where(user_id: current_user.id).first
if business
else
end
Вы также можете использовать .find_by_user_id(current_user.id)
вместо.where(...).first
Лучший вариант:
- Если вы не используете
Business
объект (ы): Вариант 1
- Если вам нужно использовать
Business
объект (ы): Вариант 3
where
вернет пустой массив, если нет записей. И[]
не равняетсяnil