Jak sprawdzic czy obiekt istnieje w bazie

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

1 Like

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.

2 Likes