Dlaczego twój kod nie działa?
Że wheremetoda 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
Businessobiektów: opcja 1
- Jeśli potrzebujesz skorzystać z
Businessobiektów: opcja 3
wherezwróci pustą tablicę, jeśli nie ma żadnych rekordów. I[]nie równa sięnil