class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
Mam ten model w mojej aplikacji rails, która wyświetla ostrzeżenie, gdy próbuję utworzyć rekordy w konsoli.
OSTRZEŻENIE O DEPRECATION: Następujące opcje w Twojej RelatedList.has_many: deklaracja zawartości są nieaktualne:: order. Zamiast tego użyj bloku zakresu. Na przykład: has_many: spam_comments, conditions: {spam: true}, class_name: 'Comment' należy przepisać w następujący sposób: has_many: spam_comments, -> {where spam: true}, class_name: 'Comment'. (wywoływane z /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
Wygląda na to, że Rails 4 ma nową: składnię kolejności do użycia w modelach, ale nie mogę znaleźć dokumentacji w przewodnikach Rails.
źródło
oder
iinclude
? This:{ order(:position), include(:track) }
rzuca błąd w przecinek.-> { order(name: :asc) }
list.contents.order('position desc')
co może być ogólnie bardziej wydajne, a nie jako model nachalny (w głosowanej odpowiedzi lista zna pole treści, tutaj kontroler to wie )Zajęło mi trochę czasu, aby dowiedzieć się, jak to zrobić porządek i to, że w końcu stwierdziliśmy, że łańcuch zakres sprawozdań,
źródło
Pomyślałem, że dodam, że jeśli masz jakieś argumenty haszujące opcji, muszą iść po lambdzie, w ten sposób:
Zajęło mi minutę, zanim sam to zrozumiałem - mam nadzieję, że pomoże to każdemu, kto przychodzi do tego pytania, mając ten sam problem.
źródło
has_many :items, -> { order 'name' }, through: :suppliers
To działa dla mnie z Rails 4 i MongoDB
źródło
Alternatywnie możesz umieścić
order
klauzulę na modelu, na przykład:Staje się
PS: Mam,
ArgumentError: wrong number of arguments (1 for 0)
kiedy robięhas_many :things, -> {}
.źródło