J'ai un système avec les modèles suivants
Offer.left_outer_joins(:applications).where(id: { 'application.accetped_offer_id' })
3 Réponses :
quelque chose comme ça?
Je ne sais pas ce que le schéma est ici, mais cela ne fonctionnera que si offre.aplication_id = application.id code> et
offre.id = applications.accepted_offer_id code> en raison de la jointure. Si ces 2 sont des préoccupations distinctes, cette requête échouera par ex. Si une application.Accepted_offer_id peut être destinée à une offre associée à une application différente
Oui, je sais, mais cela devrait travailler pour comment j'ai voulu le schéma
Pour réécrire le premier bit un peu plus agréable: se déplacer sur la réécriture de la réécriture du SQL, je suis à peu près sûr de ce que vous devez faire est: P> Offer.joins(:application).where('offers.id = applications.accepted_offer_id')
Vous pouvez également choisir d'utiliser une sous-requête.
SELECT `offers`.* FROM `offers` WHERE `offers`.`id` IN ( SELECT `applications`.`accepted_offer_id` FROM `applications` )
N'oubliez pas que la méthode #inspect code> déclenche déjà la requête (avec une limite de 11). Ce n'est qu'un problème si vous le copiez dans la console de rails. Pour éviter ce suffixe, les lignes avec
; nil code>. De cette façon, le résultat n'est pas retourné à la console, qui appellerait à son tour la méthode
#inspect code>. Sinon, vous pouvez envelopper cela dans un
commencer code> /
extrémiser code> bloc.
Essayez
.where ("application.accetped_offer_id n'est pas null") code>