Cześć potrzebuje sprawdzic czy dany obiekt istnieje w bazie.
Jeśli napiszeto co niżej i go nie ma w bazie:
Post.find(5)
to mi sypie:
ActiveRecord::RecordNotFound: Couldn’t find Post with ‘name’=5
Jakie pomysły? dzięki
Cześć potrzebuje sprawdzic czy dany obiekt istnieje w bazie.
Jeśli napiszeto co niżej i go nie ma w bazie:
Post.find(5)
to mi sypie:
ActiveRecord::RecordNotFound: Couldn’t find Post with ‘name’=5
Jakie pomysły? dzięki
Post.exists?(5)
Ja robię tak:
Post.where(id: 5).blank?
Post.where(id: 5).exists? albo Post.exists?(5)
Post.where(id: 5).blank? utworzy obiekt dla każdego rekordu spełniającego warunek w where co może spowodować problemy z wydajnością
Całkowita racja,
dzięki
Od biedy można
if Post.find_by(id: 5)
...
else
handle_no_record
end
dzięki! ; )
find_by_id
wyrzuci Ci nil jeśli nie znajdzie
Plusem exists? jest to że nie ładuje rekordu z bazy danych (robi np. SELECT 1 FROM foo where foo.id=1
) więc nie ma kilku kosztów. Tego typu zapytania często są możliwe bez dostępu do dysku po stronie bazy danych (tylko z indeksu w pamięci), nie ma transferu z bazy danych do aplikacji i nie ma alokacji (i dezalokacji) obiektu po stronie klienta.