Почему твой код не работает?
В 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