Questa potrebbe essere una domanda semplice, ma mi sembra di tirare fuori i miei capelli per trovare una soluzione elegante qui. Ho due classi del modello ActiveRecord, con un'associazione has_one e belongs_to tra di loro:Trovare nil has_one associazioni in cui query
class Item < ActiveRecord::Base
has_one :purchase
end
class Purchase < ActiveRecord::Base
belongs_to :item
end
Sto cercando un modo elegante per trovare tutti gli oggetti Item, che non hanno oggetto acquisto associato con loro, idealmente senza ricorrere a avere un valore booleano is_purchased
o un attributo simile sull'articolo.
In questo momento ho:
purchases = Purchase.all
Item.where('id not in (?)', purchases.map(&:item_id))
Che funziona, ma sembra inefficiente per me, come è eseguendo due query (e gli acquisti potrebbe essere un set di record di massa).
corso Rails 3.1.0
Questo collegamento è perfetto! Il join è praticamente esattamente ciò di cui avevo bisogno, dovevo semplicemente sostituire il punto precedente con 'where (" purchasing.item_id IS null ")' ed è bello andare. Grazie! –
Se si utilizza 'has_many' o' has_one' è possibile ottenere il join senza dover scrivere la query effettiva usando 'Item.join (: acquisti)' –