2016-06-07 12 views
0

Eine Abfrage in Rails wie folgt zu finden Fotos mit Tags von tag_id preloads Tags auf die Fotos, aber nur die Tags, die die tag_ids in der Abfrage entsprechen ... Dies wird ausgesetzt, wenn die Fotos werden später serialisiert.Rails ActiveRecord enthält alle Verknüpfungen nach übereinstimmenden Abfrage

Wie behalte ich alle zugehörigen Tags und die Fotos zurück, die diese spezifischen Tags haben?

Mit dieser Abfrage: Photo.includes(:tags).where("tags.id IN (?)", [2, 5, 10).references(:tags)

mag ich alle Fotos, die 2-Tags, 5 und 10, aber wenn ein Foto-Tag hat 2 und 3, möchte ich es Tag 3 in seiner Antwort enthalten.

Antwort

0

Es könnte einen besseren Weg geben, es zu tun, aber ich denke, das funktioniert.

# Build a query for all photo IDs that have the specified tags. 
photo_ids_query = Photo.joins(:tags) 
         .where(:tags => { :id => [2, 5, 10] }) 
         .select("photos.id") 

# Load that list of photo IDs using a subquery. 
Photo.includes(:tags) 
    .where("photos.id IN (#{photo_ids_query.to_sql})") 
Verwandte Themen