2016-06-07 3 views
0

Выполнение запроса в Rails, как это, чтобы найти фотографии с тегами tag_id preloads Теги на фотографиях, но только те теги, которые соответствуют тегу tag_ids в запросе ... Это открывается, когда фотографии становятся сериализованными позже.Rails ActiveRecord включает в себя все ассоциации после сопоставления запроса

Как сохранить все связанные теги и вернуть фотографии с этими тегами?

Используя этот запрос: Photo.includes(:tags).where("tags.id IN (?)", [2, 5, 10).references(:tags)

Я хочу, чтобы все фотографии, которые имеют метки 2, 5 и 10, но если фотография имеет тег 2 и 3, я хочу, чтобы включить метку 3 в своем ответе.

ответ

0

Возможно, это лучший способ сделать это, но я думаю, что это работает.

# 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})")