Pourquoi votre code ne fonctionne pas?
La where
méthode renvoie un objet ActiveRecord :: Relation (agit comme un tableau qui contient les résultats de la where
), il peut être vide mais il ne le sera jamaisnil
.
Business.where(id: -1)
Business.where(id: -1).nil?
Business.where(id: -1).empty?
Comment tester si au moins un enregistrement existe?
Option 1: Utilisation.exists?
if Business.exists?(user_id: current_user.id)
else
end
Option 2: Utiliser .present?
(ou .blank?
, l'opposé de .present?
)
if Business.where(:user_id => current_user.id).present?
else
end
Option 3: affectation de variable dans l'instruction if
if business = Business.where(:user_id => current_user.id).first
business.do_some_stuff
else
end
Cette option peut être considérée comme une odeur de code par certains linters (Rubocop par exemple).
Option 3b: Affectation des variables
business = Business.where(user_id: current_user.id).first
if business
else
end
Vous pouvez également utiliser à la .find_by_user_id(current_user.id)
place de.where(...).first
Meilleure option:
- Si vous n'utilisez pas le ou les
Business
objets: Option 1
- Si vous devez utiliser le ou les
Business
objets: Option 3
where
retournera un tableau vide s'il n'y a pas d'enregistrements. Et[]
n'est pas égalnil