2010-05-25 21 views
6

C'è un modo per utilizzare EXISTS con ActiveRecord oltre a find_by_sql?ActiveRecord DOVE NON ESISTE

Vorrei un bel modo per trovare tutti i record senza un'associazione in una relazione uno a molti.

SELECT DISTINCT store_type FROM stores 
    WHERE NOT EXISTS (SELECT * FROM cities_stores 
        WHERE cities_stores.store_type = stores.store_type) 

risposta

5
Store.all(:select => "DISTINCT store_type", 
      :conditions => "NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type)") 

ActiveRecord eseguirà la stessa query come quello che hai inserito sopra. Le istanze Store restituite avranno un singolo attributo store_type.

+7

Sarebbe bello se ci fosse un modo per scrivere la query interna usando i metodi standard ActiveRecord, piuttosto che SQL grezzo. È possibile? –

+0

@AndrewCone hai provato a utilizzare 'join'? Vedere il documento ufficiale http://guides.rubyonrails.org/active_record_querying.html#using-array-hash-of-named-associations – zhongxiao37