Oto dwa przykładowe kody.
Pierwsza z collect
:
User.first.gifts.collect(&:id)
Drugi z pluck
:
User.first.gifts.pluck(:id)
Czy jest jakaś różnica między nimi w działaniu, czy coś innego?
ruby-on-rails
ruby
rails-activerecord
Mohit Jain
źródło
źródło
pluck
wielu atrybutów, na przykładpluck(:id, :name)
?pluck
wiele pól, Rails 3 nie, chyba że użyjesz obejścia Ryanaid
, użyj.ids
Ref doc: api.rubyonrails.org/classes/ActiveRecord/…Tak. Zgodnie z przewodnikami Railsów ,
pluck
bezpośrednio konwertuje wynik bazy danych na plikarray
, bez konstruowaniaActiveRecord
obiektów. Oznacza to lepszą wydajność w przypadku dużych lub często wykonywanych zapytań.Oprócz odpowiedzi @ apneadiving
pluck
jako argument może przyjmować zarówno nazwy jednej, jak i wielu kolumn:źródło
Podstawowa i główna różnica polega na tym, że Pluck działa na poziomie db i zbieraj, pobierz wszystkie dane, a następnie zwróć rekordy, gdy potrzebujesz wszystkich rekordów, użyj zbierania, a gdy kilka pól, użyj pluck
źródło
Jeśli jest przypadek, w którym używasz kilku atrybutów pobranego rekordu. W takich przypadkach powinieneś użyć
pluck
.W powyższym przykładzie, jeśli potrzebujesz tylko atrybutu e-mail, to marnujesz pamięć i czas. Ponieważ pobierze wszystkie kolumny z tabeli użytkowników w bazie danych, przydziela pamięć dla każdego atrybutu (w tym atrybutów, których nigdy nie użyjesz)
UWAGA:
pluck
nie zwraca ActiveRecord_Relation użytkownikaźródło