6 Stimmen

Wie kann ich eine ActiveRecord-Abfrage schrittweise, Zeile für Zeile, aufbauen?

Ich möchte eine ActiveRecord-Abfrage mit Laufzeitdaten zusammenstellen. Was ich im Sinn habe, ist etwas wie...

r = Person.where('last_name LIKE ?', foo)
r.where('created_at < ?', Time.now - 100.days)
r.where( ...some other conditions... )

Das funktioniert aber nicht wie vorgesehen. Damit es funktioniert, muss man sie alle in einer Zeile aneinanderreihen...

Person.where('last_name LIKE ?', foo) \
  .where('created_at < ?', Time.now - 100.days) \
  .where( ...some other conditions... )

Ich versuche herauszufinden, wie ich sie auf verschiedene Vorgänge in mehreren Zeilen verteilen kann.

19voto

Sergio Tulentsev Punkte 218286

Schnittstelle für Abfragen Methoden (wie .where ) ein neues Objekt zurück. Sie müssen es also nur festhalten. Siehe:

r = Person.where('last_name LIKE ?', foo)
r = r.where('created_at < ?', Time.now - 100.days)
r = r.where( ...some other conditions... )

2voto

nzifnab Punkte 15437

Frustrierenderweise ändert Arel weder das Objekt noch die zugrunde liegende Abfrage, wenn Sie seine Methoden aufrufen. Aber jede Methode gibt das Arel-Objekt zurück, was die Verkettung ermöglicht. Das müssen Sie tun:

r = Person.where(...
r = r.where('created_at...')

usw., usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X