[RUBY] Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack

Qu'est-ce que le saccage?

Recherche bijou. Vous pouvez facilement implémenter une recherche dans la colonne de cette table ou table associée. https://github.com/activerecord-hackery/ransack Cependant, si vous souhaitez affiner par des conditions de recherche compliquées ou des conditions autres que des colonnes, vous devez en concevoir un peu.

Ce que je veux faire cette fois

Je veux rechercher certains éléments avec ʻAND et le reste avec ʻOR. La requête ressemble à ceci:

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 = 'Arbre de Tanaka' ) 
    ORDER BY sample_models.id ASC

Solution: générer un hachage des critères de recherche

group = {
          "0" => {
                   m: "and",
                   column_1: "202001", 
                   column_2: "Hokuto Matsumura"
                 }, 
          "1" => {
                   m: "or",
                   column_3: "Jesse", 
                   column_4: "Arbre de Tanaka"
                 }
        }
#résultat
SampleModel.search(g: group).result

En concevant le hachage attribué au groupe, vous pouvez manipuler les conditions de regroupement, ET et OU comme vous le souhaitez. Pratique! Cependant, si la lisibilité est réduite ou si vous faites des choses aussi irrégulières, cela coûte de l'argent à étudier, donc si vous savez que les conditions de recherche seront hors de sac dès le début, ne le forcez pas à correspondre au saccage et faites-le vous-même. Je pense qu'il vaut mieux écrire une requête.

Recommended Posts

Lorsque vous souhaitez écrire explicitement OR ou AND avec ransack
docker-compose.yml lorsque vous voulez garder mysql en cours d'exécution avec docker
lombok.config lorsque vous voulez passer @Qualifier à @RequiredArgsConstructor avec lombok
Comment écrire lorsque vous souhaitez conserver les sauts de ligne et la sortie tout en évitant XSS dans Rails
Résumé des moyens lorsque vous souhaitez communiquer avec HTTP sur Android
Lorsque vous souhaitez lier InputStream dans JDBI3
Lorsque vous souhaitez utiliser la méthode à l'extérieur
[Ruby] Lorsque vous souhaitez remplacer plusieurs caractères
Si vous souhaitez utiliser Mockito avec Kotlin, utilisez mockito-kotlin
Je veux faire des transitions d'écran avec kotlin et java!
Lorsque vous souhaitez remplacer dynamiquement l'annotation dans Java 8
Commande lorsque vous souhaitez effacer toutes les images et tous les conteneurs Docker proprement et recommencer
Vous devez également spécifier l'hôte lors du débogage à distance avec Java 9 ou version ultérieure
Code à utiliser lorsque vous souhaitez traiter Json en Java avec uniquement des bibliothèques standard
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Comment écrire et noter lors de la migration de VB vers JAVA
Lorsque vous souhaitez implémenter des tests de bibliothèque Java avec Spock en multi-module avec Gradle dans Android Studio 3
Je veux implémenter diverses fonctions avec kotlin et java!
Delicate est pratique à utiliser lorsque vous souhaitez réutiliser des pièces
[Pour les super débutants] Les connaissances minimales que vous voulez garder à l'esprit avec les hachages et les symboles
Conseils lorsque vous souhaitez insérer de nombreux sauts de ligne et tabulations lors du remplacement d'une chaîne de caractères
Je veux pouvoir penser et écrire moi-même des expressions régulières. ..
Je veux revenir à l'écran précédent avec kotlin et java!
Je veux éviter OutOfMemory lors de la sortie de gros fichiers avec POI
[jOOQ] Comment utiliser CASE WHEN dans la clause WHERE / AND / OR
[Java] Comment écrire lors du passage de deux arguments ou plus à super
Comment écrire lors de l'installation d'Amazon Corretto 8 sur CentOS 8 avec Ansible.
Lorsque vous avez introduit la devise mais que vous souhaitez ajouter plus de colonnes
[Rails] Je souhaite ajouter des données aux paramètres lors de la transition avec link_to
Je souhaite effectuer un traitement asynchrone et une exécution périodique avec Rail !!!
Pratique à utiliser lorsque vous souhaitez exécuter différents groupes de traitement en série
Plug-in Vuze pour écrire et profiter
Lorsque vous souhaitez ajouter une colonne de type chaîne avec une longueur limitée avec la commande `rails generate migration`
La première chose à faire lorsque vous voulez être satisfait d'Heroku sur GitHub avec Eclipse sur Java
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
Je veux afficher des images avec REST Controller de Java et Spring!
[Pour les débutants] Lorsque vous voulez dire que l'option JVM (-D) ne fonctionne pas avec la commande java -jar, ou que la bibliothèque est boguée.
(Limité à Java 7 ou version ultérieure) Je souhaite que vous compariez des objets dans Objects.equals
Si vous voulez créer un fichier zip avec Ruby, c'est rubyzip.
Je veux écrire un joli build.gradle
Si vous osez comparer Integer avec "==" ...
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Commandes de base de Rails que vous souhaitez apprendre
[Rails] [Note] Quand ajouter = à <%%> et quand pas
Conversion de JSON en TSV et TSV en JSON avec Ruby
Si vous utilisez Android Room et que vous souhaitez modifier la définition de colonne
Lorsque vous souhaitez notifier une erreur quelque part lors de l'utilisation de graphql-spring-boot avec Spring Boot
Comment obtenir uniquement les articles et les transactions que vous avez commentés ou envoyés par message [comprend]
Code utilisé lorsque vous souhaitez traiter Json avec uniquement des bibliothèques standard en Java (version améliorée) gson inutile