J'ai le modèle suivant dans Ruby
entities = [] accounts.each do |account| entities << Entity.where(account_id: ActiveSupport::HashWithIndifferentAccess.new(account)['account_id']) .where(account_type: ActiveSupport::HashWithIndifferentAccess.new(account)['account_type']) end
3 Réponses :
Si vous utilisez des rails 5, vous pouvez essayer Ce n'est qu'une requête SQL, mais si le tableau est grand, je ne sais pas comment cela fonctionne. p> p> ou code>. Quelque chose comme ça
étant donné ceci: Le SQL que vous voulez est: p> Notez que la précédente de l'opérateur de SQL rend la même chose que: accounts = your_array_of_hashes
entities = accounts.inject(Entity.none) { |memo, h| memo.or(Entity.where(h)) }
Si j'ai eu votre problème, cela devrait le résoudre:
entities = accounts.map { |acc| Entity.where(account_id: acc['account_id'], account_type: acc['account_type']) }
mappe code> renvoie une matrice toutes les entrées qui correspondent à quelque chose à quoi que ce soit à la base de données li>
- La carte
code> est interaticée via le tableau de comptes, tout comme le chacun code>, ce qui signifie qu'il apportera les données sur les comptes au où code> Query Li>
- A
virgner code> entre où code> conditions fonctionne également pour les comparaisons, sauf si vous effectuez un ou code>, dans le cas où je suppose que vous pouvez utiliser ceci Syntaxe: où ('compte_id =: id ou compte_type =: TYPE', ID: ACC ['compte_id'], Type: ACC ['Compte_Type']) Code> Li>
ul> p>
Puisque vous voulez un enregistrement pour correspondre à la fois aux attributs en même temps, je ne peux pas penser à une meilleure façon. Cependant, il peut y avoir un meilleur moyen d'accomplir tout ce que vous essayez de faire. Peut-être qu'il y a un problème avec la logique que vous avez suivie qui vous a amené à la nécessité de cette requête et non de la requête elle-même.
Avez-vous besoin de lancer comme
hashwithindiferencess code>, si vous n'associez que par chaîne? Les deux
où code> Les clauses ressemblent à elles pourraient être combinées dans
où (compte_id: compte ['Compte_id'], Compte_Type: compte [Compte_type]) Code> ou éventuellement
où (compte) code> si vous faites confiance aux attributs. Vous pouvez également utiliser
entité.select ("ID, nom"). Où () code> pour réduire le nombre de champs tirés si vous n'en avez pas besoin.