Perché il tuo codice non funziona?
Il where
metodo restituisce un oggetto ActiveRecord :: Relation (agisce come un array che contiene i risultati di where
), può essere vuoto ma non lo sarà mainil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
Come verificare se esiste almeno un record?
Opzione 1: utilizzo di.exists?
if Business.exists?(user_id: current_user.id)
else
end
Opzione 2: utilizzo .present?
(o .blank?
, l'opposto di .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
Opzione 3: assegnazione di variabili nell'istruzione if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
Questa opzione può essere considerata un odore di codice da alcuni linter (Rubocop per esempio).
Opzione 3b: assegnazione di variabili
business = Business.where(user_id: current_user.id).first
if business
else
end
Puoi anche usare al .find_by_user_id(current_user.id)
posto di.where(...).first
Opzione migliore:
- Se non utilizzi gli
Business
oggetti: opzione 1
- Se è necessario utilizzare gli
Business
oggetti: Opzione 3
where
restituirà un array vuoto se non ci sono record. E[]
non è ugualenil