Intersection de deux relations
Dire que j'ai deux relations qui détiennent des dossiers dans le même modèle, tels que:
@companies1 = Company.where(...)
@companies2 = Company.where(...)
Comment puis-je trouver l'intersection de ces deux relations, c'est à dire uniquement les entreprises qui existent à l'intérieur de deux à la fois?
Semble que vous ne voulez pas sql ici. Vous pouvez utiliser la matrice d'intersection de la méthode: ruby-doc.org/core/classes/Array.html#M000274
OriginalL'auteur sscirrus | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
Par défaut de la connexion de ces
where
ensemble crée ET qui est ce que vous voulez.Donc nombreux:
====== Mise à JOUR ======
Il y a deux cas:
Donc, si vous êtes dans le cas 2, vous aurez besoin de faire comme ce @apneadiving commenté.
Bien sûr, cela envoie deux requêtes et les plus susceptibles interrogé plus de résultats que vous avez besoin.
where
. Est-il un moyen manuel pour calculer cette intersection?Mise à jour de la réponse, veuillez jeter un oeil.
N'est-ce pas retourner un tableau? Comment puis-je la faire revenir ActiveRecord de Ressources?
le & symbole ne fonctionne pas
Je l'ai juste essayé avec le & symbole et il a travaillé pour moi.
OriginalL'auteur PeterWong
Utiliser le mot clé sql se CROISENT.
il sera plus rapide que la précédente solution.
params1
etparams2
sont à la fois des tableaux de indetermine longueur?1. Vous pouvez modifier l'emplacement de la condition, si vous trouver pas par id à propos. 2. Quelque chose comme: "...where id IN (#{params1.carte{'?'}.join(',')})..."
J'ai trouvé que
#{Array.new(params1.size, '?').join(',')}
est plus rapide. Mais il n'est pas si important dans ce cas.OriginalL'auteur Michael
- Je résoudre le même problème de cette façon
Nous avons besoin de
unprepared_statement
bloc ici car le dernier Rails utilisent des versions préparées pour accélérer arel requêtes, mais nous avons besoin de la pure SQL en place.OriginalL'auteur MikDiet
Vous pouvez utiliser
ActiveRecord::SpawnMethods#fusion
Exemple:
OriginalL'auteur KARASZI István
Pour quelqu'un qui est coincé avec Rails4 et ne peux utiliser Rails5 .ou la syntaxe:
J'avais dynamiquement, un certain nombre de requêtes, qui avaient les mêmes conditions ( et donc aussi des résultats similaires). Mon rake serveur ont des problèmes quand toutes à la fois, serait d'obtenir instancié, convertis à des tableaux et ensuite fusionné.
J'avais besoin d'un ActiveRecord::Rapport (pas tiré encore) à utiliser avec find_each.
Cherché quelque chose comme ceci:
Genre de hacky mais il fonctionne, jusqu'à ce que vous pouvez espérer de migrer vers les Rails 5
OriginalL'auteur lennart_dev