class RelatedList < ActiveRecord::Base
extend Enumerize
enumerize :list_type, in: %w(groups projects)
belongs_to :content
has_many :contents, :order => :position
end
Ich habe dieses Modell in meiner Rails-App, die eine Warnung auslöst, wenn ich versuche, Datensätze in der Konsole zu erstellen.
DEPRECATION WARNING: Die folgenden Optionen in Ihrer RelatedList.has_many: Inhaltsdeklaration sind veraltet :: order. Bitte verwenden Sie stattdessen einen Bereichsblock. Beispiel: has_many: spam_comments, Bedingungen: {spam: true}, Klassenname: 'Kommentar' sollte wie folgt umgeschrieben werden: has_many: spam_comments, -> {wobei Spam: wahr}, Klassenname: 'Kommentar'. (aufgerufen von /Users/shivam/Code/auroville/avorg/app/models/related_list.rb:7)
Es scheint, als ob Rails 4 eine neue Syntax für die Verwendung in Modellen hat, aber ich kann die Dokumentation in Rails Guides nicht finden.
quelle
oder
undinclude
? Dies:{ order(:position), include(:track) }
Wirft einen Fehler auf das Komma.-> { order(name: :asc) }
list.contents.order('position desc')
was insgesamt effizienter und nicht als aufdringliches Modell sein kann (in der abgestimmten Antwort kennt die Liste ein Inhaltsfeld, hier weiß es der Controller )Es hat eine Weile gedauert, bis ich herausgefunden hatte, wie man bestellt und einschließt. Schließlich stellte ich fest, dass Sie die Scope- Anweisungen verketten.
quelle
Ich dachte nur, ich würde hinzufügen, dass, wenn Sie Options-Hash-Argumente haben, diese dem Lambda folgen müssen, wie folgt:
Ich habe eine Minute gebraucht, um das selbst herauszufinden - hoffentlich hilft es allen anderen, die zu dieser Frage kommen und das gleiche Problem haben.
quelle
has_many :items, -> { order 'name' }, through: :suppliers
Dies funktioniert bei mir mit Rails 4 & MongoDB
quelle
Alternativ können Sie die
order
Klausel in das Modell einfügen, zum Beispiel:Wird
PS: Ich habe
ArgumentError: wrong number of arguments (1 for 0)
dabeihas_many :things, -> {}
.quelle