Rails 4 Syntax - Mehrere Bedingungen
Wie würde ich dies Schreibe, richtig?
Request.pending.where(.....) ## Request.pending = request.state_id in (1..3)
wo diese sind die Bedingungen:
approver1_id = current_user and state_id = 1
or
approver2_id = current_user and state_id = 2
or
approver3_id = current_user and state_id = 3
Es wäre wirklich schön, wenn ich könnte diese Bedingungen im Modell für die Verwendung in anderen Steuerungen/Ansichten, auch, weil ich diese Bedingungen sehr oft in der gesamten app.
Vielleicht
Sorry, ich vergaß die ODER zwischen...
Request.pending.where(approver1_id: current_user, state_id: 1)
. Oder braucht man alle 3 zur Zeit?Sorry, ich vergaß die ODER zwischen...
InformationsquelleAutor Katie M | 2013-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Bearbeiten:
Ich habe vergessen, dass Sie verwenden sollten Doppelpunkte. Und sollte es nicht sein, 'current_user.id'? Unklar ist auch, ob Ihre Anfrage verwenden Sie die drei Parameter approver1_id - approver3_id oder nur eine approver_id pro Anfrage.
Edit 2:
Geändert Abfrage auf SQL.
Eine ANFRAGE hat drei Genehmiger für die drei Staaten. Ich bin nur ziehen Sie ausstehende Anforderungen mit dem Geltungsbereich:
Request.pending = state_id of 1-3, which is: (Pending Approval 1, Pending Approval 2, Pending Approval 3).
Wenn der Antrag "Genehmigung Ausstehend" 1 und ich bin Genehmiger 1, der Eintrag muss in meiner Liste - das gleiche, wenn ich Genehmiger 2 und der Antrag " Genehmigung Ausstehend 2... etc. Aber, wenn ich mich Genehmiger 1 und der Antrag "Genehmigung Ausstehend "2", dann möchte ich nicht sehen, den Eintrag in meine Liste.aktuelle Benutzer können nur eine zu einem Zeitpunkt, richtig? Das ist, warum ich mich auf die Prüfung für current_user.id nur. Vielleicht sind Sie versuchen zu verbessern Sie Ihre DB-schema. Ansonsten machen Sie Ihre Frage konkreter.
Current_user kann manchmal eine Kombination der Genehmiger 1, 2 und/oder 3, so muss es sein, eine ODER-Bedingung, wo der Staat-Nummer entspricht der genehmigende Anzahl - ich bin mir nicht sicher, wie Sie Sie ändern das DB-schema passen diese Kriterien, aber ich begrüße Vorschläge. Vielleicht kann ich etwas in den user-Modell, findet my_pending_requests? Das ist, warum ich hier bin..
OK, ich habe die Abfrage auf SQL. Es ist nicht schön, aber es sollte funktionieren.
InformationsquelleAutor AWM
Zur Beantwortung des zweiten Teils Ihrer Frage, über die Weiterverwendung dieser Abfrage können Sie nur eine Klasse definieren, Methode auf
Request
akzeptiert, dass ein Benutzer-parameter:Wenn Sie wollen in der Lage sein, um die Wiederverwendung der einzelnen Bestandteile der Abfrage und kombinieren Sie Sie nach Bedarf, siehe in diesem Zusammenhang beantworten (Beachten Sie, die Antwort verknüpft ist besser als das akzeptiert man, IMO).
InformationsquelleAutor exbinary
Gut
Ersten bekommen alle state_id & speichern Sie ihn in der Reihe. und übergeben, array in where-Klausel. Es ist ähnlich wie Mysql IN Abfrage.
Daher wird die Abfrage etwas wie:
Ich hoffe, es holt Sie das gewünschte Ergebnis.
Request.pending.where('state_id IN [1,2,3]')
?Anfrage.anhängig ist bereits im Modell definiert. Ich brauche das state_id Anzahl entsprechend der approver_id Anzahl.
InformationsquelleAutor Hare Kumar