Чому ваш код не працює?
У 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