Mit scope_builder bedingt einen benannten Umfang in einem Active Record Modell suchen bauen () -Methode
-
08-07-2019 - |
Frage
Ich bin mit ausgezeichneten scope_builder bedingt bauen ein neuer benannte Umfang in der Suche () -Methode eines Active Record-Modells zu verwenden.
Das Beispiel Dokumentation zeigt, dass Sie so etwas wie die folgenden Möglichkeiten:
# in product model
def self.search(options)
scope_builder do |builder|
builder.released.visible
builder.cheap if options[:cheap]
end
end
Aber wenn ich die entsprechende Version des obigen Code in meinem Modell und Call-Suche () sind mit einigen Optionen übergeben, was ich zurück zu bekommen ist eine Instanz ScopeBuilder :: Builder und nicht die Ergebnisse der verketteten Namen Umfang Ausführung mit den Optionen habe ich bestanden, das ist, was ich erwarten würde.
Meine Frage ist: Wie erhalte ich die Ergebnisse der Ausführung Builder (Optionen) anstelle einer Instanz des Erbauers
Lösung
Sieht aus wie der scope_builder Block wurde entworfen den Umfang zurückzukehren -builder Instanz, so dass Sie die Ergebnisse aus dem Beispiel bekommen.
Versuchen Sie, auf die Instanz mit .all die Ergebnisse zu greifen. Zum Beispiel so etwas wie:
@results = Product.search().all
seine Tests , es sieht wie folgt funktionieren soll. (Linie 47: „sollte Umfang in Block der Lage sein, den Aufbau“)