[RUBY] Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten

Was ist Durchsuchung?

Suche Edelstein. Sie können problemlos eine Suche in der Spalte dieser Tabelle oder der zugehörigen Tabelle implementieren. https://github.com/activerecord-hackery/ransack Wenn Sie jedoch durch komplizierte Suchbedingungen oder andere Bedingungen als Spalten eingrenzen möchten, müssen Sie ein wenig überlegen.

Was ich diesmal machen möchte

Ich möchte nach einigen Elementen mit "UND" und nach dem Rest mit "ODER" suchen. Die Abfrage sieht folgendermaßen aus:

SELECT DISTINCT sample_models.* 
  FROM sample_model 
    WHERE (sample_models.column_1 = '202001' AND sample_models.column_2 = 'Hokuto Matsumura') 
      AND ( sample_models.column_3 = 'Jesse' OR sample_models.column_4 = 'Tanaka-Baum' ) 
    ORDER BY sample_models.id ASC

Lösung: Generieren Sie einen Hash von Suchkriterien

group = {
          "0" => {
                   m: "and",
                   column_1: "202001", 
                   column_2: "Hokuto Matsumura"
                 }, 
          "1" => {
                   m: "or",
                   column_3: "Jesse", 
                   column_4: "Tanaka-Baum"
                 }
        }
#Ergebnis
SampleModel.search(g: group).result

Indem Sie den der Gruppe zugewiesenen Hash erstellen, können Sie die Bedingungen für die Gruppierung, UND und ODER nach Ihren Wünschen ändern. Praktisch! Wenn jedoch die Lesbarkeit beeinträchtigt ist oder wenn Sie solche unregelmäßigen Dinge tun, kostet das Lernen Geld. Wenn Sie also wissen, dass die Suchbedingungen von Anfang an nicht durchsucht werden, erzwingen Sie nicht, dass sie mit der Durchsuchung übereinstimmen, und tun Sie es selbst. Ich denke, es ist besser, eine Abfrage zu schreiben.

Recommended Posts

Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
docker-compose.yml, wenn Sie MySQL auf Docker laufen lassen möchten
lombok.config, wenn Sie @Qualifier mit lombok an @RequiredArgsConstructor übergeben möchten
So schreiben Sie, wenn Sie Zeilenumbrüche und Ausgaben beibehalten und XSS in Rails vermeiden möchten
Zusammenfassung der Mittel, wenn Sie mit HTTP unter Android kommunizieren möchten
Wenn Sie InputStream in JDBI3 binden möchten
Wenn Sie die Methode außerhalb verwenden möchten
[Ruby] Wenn Sie mehrere Zeichen ersetzen möchten
Wenn Sie Mockito mit Kotlin verwenden möchten, verwenden Sie Mockito-Kotlin
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Befehl, wenn Sie alle Docker-Images und -Container sauber löschen und neu beginnen möchten
Sie müssen den Host auch beim Remote-Debugging mit Java 9 oder höher angeben
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Schreiben und Notizen bei der Migration von VB zu JAVA
Wenn Sie Java-Bibliothekstests mit Spock in mehreren Modulen mit Gradle in Android Studio 3 implementieren möchten
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Delicate ist praktisch, wenn Sie Teile wiederverwenden möchten
[Für Super-Anfänger] Das Mindestwissen, das Sie mit Hashes und Symbolen berücksichtigen möchten
Tipps, wenn Sie beim Ersetzen einer Zeichenfolge viele Zeilenumbrüche und Tabulatoren einfügen möchten
Ich möchte in der Lage sein, selbst reguläre Ausdrücke zu denken und zu schreiben. ..
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Ich möchte OutOfMemory bei der Ausgabe großer Dateien mit POI vermeiden
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
[Java] Wie schreibe ich, wenn ich zwei oder mehr Argumente an super übergebe?
So schreiben Sie bei der Installation von Amazon Corretto 8 unter CentOS 8 mit Ansible.
Wenn Sie devise eingeführt haben, aber weitere Spalten hinzufügen möchten
[Rails] Ich möchte beim Übergang mit link_to Daten zu Params hinzufügen
Ich möchte eine asynchrone Verarbeitung und periodische Ausführung mit Rail durchführen !!!
Üben Sie die Verwendung, wenn Sie verschiedene Verarbeitungsgruppen seriell ausführen möchten
Vuze Plug-In zum Schreiben und Genießen
Wenn Sie mit dem Befehl "Rails Generate Migration" eine Spalte vom Typ "String" mit begrenzter Länge hinzufügen möchten
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Wenn Rails eine Sitzung für einen bestimmten Controller deaktivieren soll
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.
Ich möchte ein schönes build.gradle schreiben
Wenn Sie es wagen, Integer mit "==" zu vergleichen ...
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte einen Unit Test schreiben!
Grundlegende Rails-Befehle, die Sie lernen möchten
[Rails] [Hinweis] Wann = zu <%%> hinzugefügt werden soll und wann nicht
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
Wenn Sie Android Room verwenden und die Spaltendefinition ändern möchten
Wenn Sie irgendwo einen Fehler melden möchten, wenn Sie graphql-spring-boot mit Spring Boot verwenden
So erhalten Sie nur Artikel und Transaktionen, die Sie kommentiert oder mit Nachrichten versehen haben [enthält]
Code, der verwendet wird, wenn Sie Json nur mit Standardbibliotheken in Java (verbesserte Version) verarbeiten möchten. Gson ist nicht erforderlich