Sebbene l'utilizzo di SQL hard-coded come suggerito da DanneManne molto spesso funzionerà, ed è probabilmente il modo in cui vorresti andare, non è necessariamente componibile. Non appena è stato codificato un nome di tabella, è possibile che si verifichino problemi che lo associno ad altre query in cui ActiveRecord può decidere di eseguire l'alias della tabella.
Così, a costo di una certa complessità in più, possiamo risolvere questo utilizzando alcuni Arel come segue:
f = Friend.arel_table
User.
where(:id=>f.project(:user_id).where(f[:name].eq('Joe'))).
where(:id=>f.project(:user_id).where(f[:name].eq('Jack')))
Ciò utilizzare un paio di sottoquery per fare il lavoro.
Sono abbastanza certo che ci sia una soluzione ARel che usa anche join, ma e posso capire come comporre quella query in ARel, non solo come usare quella query come base per una query ActiveRecord per tornare indietro Istanze del modello utente.
fonte
2012-05-21 16:23:01
Mi dispiace, non ho letto abbastanza attentamente la tua domanda ... ha cancellato la mia risposta errata. – Mischa
@muistooshort in sostituzione o con e non funziona –
Hai frainteso la mia correzione all'incomprensione di Mischa, i nostri commenti stavano dicendo la stessa cosa. –