2016-09-14 3 views
0

У меня есть профиль модели, у которого есть onetoone с моделью Interest. Если я запрашиваю массив профилей, используя где, как я могу получить еще один отдельный массив, состоящий из интересов, связанных с теми, кто первоначально запросил профили?Ruby on Rails: Подзапросы массива реляционных объектов найденных объектов?

Что-то вроде

@foundProfiles = Profile.where(field: data) 

в

@foundInterests = @foundProfiles.Interest.all 

это не работает, но это идея, которую я пытаюсь получить в.

ответ

2

использование Сделать ассоциации:

@foundProfiles = Profile.includes(:interest).where(field: data) 
# Eager load interest to avoid n + 1 queries 

@foundInterests = @foundProfiles.map(&:interest) 

EDIT

Если вам нужно дополнительно запросить по Interest записи вы можете сделать что-то вроде:

@foundInterests = Interest.where(profile_id: @foundProfiles.map(&:id)) 

Это вернет вас Interest записей, связанных с @foundProfiles, и вы можете цепью where на нем

+0

Спасибо, я был в темноте о функции карты. –

+0

Кажется, что я не могу сделать следующее, где на @foundInterests, хотя ... он не дает мне метода, где ошибка –

+0

Нет, вы не можете. он вернет вам массив –

Смежные вопросы