Ruby on Rails

Zaawansowane zapytania ActiveRecord

Query interface, where, joins, includes, eager loading, problem N+1, transactions, locking (optimistic/pessimistic)

28 pytań z rozmów·
Mid-Level
1

Która metoda ActiveRecord pobiera rekord po jego kluczu głównym i zgłasza wyjątek, jeśli nie zostanie znaleziony?

Odpowiedź

Metoda find pobiera rekord po jego kluczu głównym i zgłasza wyjątek ActiveRecord::RecordNotFound, jeśli rekord nie istnieje. Zapewnia to, że kod zawodzi jawnie, zamiast kontynuować z wartością nil. Aby uniknąć wyjątku i zamiast tego zwrócić nil, użyj find_by(id: value).

2

Jaka jest główna różnica między find_by a where.first w ActiveRecord?

Odpowiedź

find_by zwraca bezpośrednio pojedynczy rekord lub nil, podczas gdy where.first zwraca relację ActiveRecord, a następnie wywołuje first, aby uzyskać pierwszy wynik. W praktyce find_by generuje zoptymalizowane zapytanie z LIMIT 1, podczas gdy where może potencjalnie załadować więcej danych przed wybraniem pierwszego elementu.

3

Jak przekazać wiele warunków do metody where w ActiveRecord?

Odpowiedź

Metoda where przyjmuje hash z wieloma kluczami, aby określić wiele warunków, które zostaną połączone za pomocą AND. Na przykład User.where(status: 'active', role: 'admin') generuje WHERE status = 'active' AND role = 'admin'. W przypadku warunków OR użyj or lub surowych zapytań SQL.

4

Czym jest problem N+1 w ActiveRecord?

5

Której metody użyć, aby rozwiązać problem N+1 poprzez wstępne ładowanie asocjacji?

+25 pytań z rozmów

Opanuj Ruby on Rails na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo