Dlaczego twój kod nie działa?
Że where
metoda zwraca ActiveRecord :: Relacja obiektu (działa jak tablica, która zawiera wyniki Spośród where
), to może być pusty, ale to nigdy nie będzienil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
Jak sprawdzić, czy istnieje co najmniej jeden rekord?
Opcja 1: używanie.exists?
if Business.exists?(user_id: current_user.id)
else
end
Opcja 2: używanie .present?
(lub .blank?
przeciwieństwo .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
Opcja 3: przypisanie zmiennej w instrukcji if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
Tę opcję można uznać za zapach kodu przez niektóre lintery (na przykład Rubocop).
Opcja 3b: przypisanie zmiennych
business = Business.where(user_id: current_user.id).first
if business
else
end
Możesz także użyć .find_by_user_id(current_user.id)
zamiast.where(...).first
Najlepsza opcja:
- Jeśli nie korzystasz z
Business
obiektów: opcja 1
- Jeśli potrzebujesz skorzystać z
Business
obiektów: opcja 3
where
zwróci pustą tablicę, jeśli nie ma żadnych rekordów. I[]
nie równa sięnil