2012-02-29 7 views
7

powiedzmy zbudować kwerendę udziałem metody wielokrotnego łańcuchowym, takie jakRails 3 ActiveRecord metoda tworzenia łańcuchów, pod maską

Post.where('id > 10').limit(20).order('id asc').except(:order) 

Zastanawiam się, co się dzieje za kulisami? Przypuszczalnie każda część łańcucha pomoże zbudować SQL SELECT, a gdy łańcuch zostanie "ukończony", instrukcja zostanie wykonana, modele utworzone itd. Jak "wie", gdzie kończy się łańcuch? Czy każda metoda zwraca wartość ActiveRecord :: Relation, która tworzy fragment SQL?

+0

możliwe duplikat [Jak łańcuch Rails ActiveRecord „gdzie” klauzul bez wielokrotnych zapytań?] (Http://stackoverflow.com/questions/10747106/how-does-rails-activerecord-chain-where-clauses-without- wiele pytań) – Nateowami

Odpowiedz

13

Masz rację, każdy z nich zwraca wartość ActiveRecord::Relation. Każde wywołanie metody opiera się na relacji, na którą została wywołana (z wyjątkiem pierwszej, która oczywiście nie ma nic do zbudowania, ponieważ nie została wywołana w relacji) i zwraca ją.

ona „wie”, gdzie koniec łańcucha jest fakt, że zapytania nie są faktycznie wykonywane, dopóki nie próbować manipulować/dostępu do danych, a przez to mają (najczęściej niejawnie) nazywa to_a kursujący exec_queries.

+0

ah, to ma sens. – seand

Powiązane problemy