Nach der Rails documentation for scope
, ein Rahmen wie zum Beispiel:Warum kann diese bereichsähnliche Abfragemethode keine Zurückweisung verwenden?
class Shirt < ActiveRecord::Base
scope :red, -> { where(color: 'red') }
end
ist wirklich:
class Shirt < ActiveRecord::Base
def self.red
where(color: 'red')
end
end
Sie sagen auch, dass die Beziehung als Array
handeln sollte, so etwas wie diese
Shirt.red.each(&block)
sollte funktionieren ... und es tut.
Mit allem, was wir oben wissen, warum funktioniert das folgende nicht?
class Shirt < ActiveRecord::Base
def self.short_sleeved
reject{|object| object.short_sleeved == false}
end
end
Shirt.red.short_sleeved
Ergebnisse in undefined method 'reject' for #<Class:0xba552d4>
Ich weiß nicht, was Sie zu tun versuchen? 'Klasse Shirt {wo (short_sleeve: true)} end' '' wird es tun –
MZaragoza
Laut APIDock sollte die Syntax ich hätte funktionieren sollen ... aber ich habe einen Thread gefunden auf der Schiene git Repository, das den gleichen Fehler gegeben hatte. Die Lösung besteht darin, alle dem Enumerator voranzustellen ... all.reject {} https://github.com/rails/rails/issues/21943 –