Przyjrzałem się ponad 10 stronom, próbując znaleźć zalety zakresu w stosunku do każdej innej metody klasy ActiveRecord, która zwraca ActiveRecord :: Relation.Jaka jest prawdziwa korzyść z obiektywów?
Poniżej na przykład, dlaczego są zakresy lepsze niż alternatywa pod nim, które robią to samo:
#scope :pat1, lambda {{:conditions => ["name like ?", 'J%']}}
#scope :pat2, lambda {{:conditions => ["id > 5"]}}
def self.pat1
where("name like ?", 'J%')
end
def self.pat2
where("id > 5")
end
def patx
self.class.pat1.pat2.first
end
Dokumentacja kółko mówi, że zakresy są korzystne, ponieważ mogą one być przykuty ...
"Wszystkie metody zasięgu zwrócą obiekt ActiveRecord :: Relation, który pozwoli na wywołanie na nim dalszych metod (na przykład innych zakresów)." - guides.rubyonrails.org
„Głównym powodem zakresy są lepsze od zwykłych metod klasy jest to, że mogą one być przykuty z innymi metodami” http://ruby.railstutorial.org
... ale alternatywą powyżej mogą być również przykuty jej wytwarzania takie same wyniki.
Próbuję się dowiedzieć, czy dzieje się tu coś nowego w cesarskim ubraniu. Nawet z punktu widzenia syntaktycznego wydaje się, że nie ma żadnej korzyści. Czy są szybsze - niektóre źródła niejasno to sugerują.
Arel Zakładam, że oznacza ActiveRecord :: Relation. OK. Korzyści syntaktyczne wydają mi się dyskusyjne. Ale jeśli robili coś, czego standardowe metody nie mogły wykonać w poprzednich wersjach, to to wyjaśnia. – Mark
Z szynami o lepszej składni jest ważne. Nie dla bazy kodu w dniu 1 (lub nawet 100), ale dla podstawy kodu w dniu 1000. –