Niedawno rozpocząłem staż. Mój pracodawca używa ruby on rails i często napotykam nową składnię, którą muszę spojrzeć, aby zrozumieć. Przeszukałem go w poszukiwaniu dobrego wyjaśnienia named_scope, ale jak dotąd znalazłem głównie posty na blogu, które chwalą go, a raczej prostą definicję lub wprowadzenie.
Czym dokładnie jest named_scope (teraz nazywany po prostu zakresem) w ruby on rails?
ruby-on-rails
named-scope
Ziggy
źródło
źródło
Odpowiedzi:
Zakres to podzbiór kolekcji. Brzmi skomplikowanie? Tak nie jest. Wyobraź to sobie:
Masz użytkowników. Teraz niektórzy z tych Użytkowników są zapisani do Twojego biuletynu. Osoby, które otrzymują newsletter, oznaczyłeś dodając pole do Bazy Użytkowników (user.subscribe_to_newsletter = true). Oczywiście czasami chcesz pozyskać tych Użytkowników, którzy zapisali się do Twojego biuletynu.
Oczywiście zawsze możesz to zrobić:
Zamiast zawsze to pisać, możesz jednak zrobić coś takiego.
Jeśli używasz Rails 4 lub nowszych , zrób to:
Dzięki temu możesz uzyskać dostęp do swoich subskrybentów, wykonując po prostu następujące czynności:
To bardzo prosty przykład, ale ogólnie zakresy mogą być bardzo potężnymi narzędziami ułatwiającymi pracę.
Sprawdź ten link: Opis API
źródło
scope
składnia jest znacznie czystsza, otrzymujesz ten sam wynik, ale tylko z jedną liniązasięg w aktywnym rekordzie jest podobny do metod klasowych, ale zwracają obiekt Relation, co oznacza, że możesz wywołać inny zasięg lub metodę zapytania rekordu aktywnego.
Na przykład, jeśli masz model Zombie (stół zombie) z wymienionymi poniżej metodami zakresu,
I dzwonisz
To tłumaczy się poniżej w SQL,
Powyższy przykład oparty jest na składni rails 4
źródło
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderNajlepszym sposobem na zrozumienie szczegółów jest przejście do dokumentacji API.
Otrzymasz pełne informacje i sposoby, w jakie możemy korzystać z Zakresów.
Dokumentacja API zakresu
źródło
Po co ich używać?
Zasięg umożliwia określenie często używanych zapytań (można je traktować jako skrót dla długich lub najczęściej używanych zapytań), do których można się odwoływać jako wywołania metod w obiektach lub modelach asocjacji. Dzięki tym zakresom możesz użyć wszystkich wcześniej omówionych metod, takich jak gdzie, łączy i zawiera. Wszystkie metody zakresu zwrócą obiekt ActiveRecord :: Relation, który pozwoli na wywołanie na nim dalszych metod (takich jak inne zakresy).
Aby zdefiniować prosty zakres, używamy metody scope wewnątrz klasy, przekazując zapytanie, które chcielibyśmy uruchomić, gdy ten zakres zostanie wywołany:
To jest dokładnie to samo, co definiowanie metody klasowej, a to, której używasz, zależy od osobistych preferencji:
Kliknij poniższy link, aby uzyskać pełny opis z przykładem. Mam nadzieję, że to Ci pomoże.
http://guides.rubyonrails.org/active_record_querying.html
źródło
nil
w kilku przypadkach, a zatem nie można ich łączyć w łańcuch w pewnych warunkach.Teraz wyobraź sobie:
Możesz uzyskać te konkretne klasy ludzi, używając zakresu!
To nie było takie trudne, prawda?
źródło