2

Скажите,Найти запись, которая имеет ВСЕ связанные записи

у нас есть модели «Лицо» и «Избранные».

«Фаворит» является то, что этот человек любит: «музыка», «видео», «спорт», «Интернет», «путешествия» и т.д.

«лицо» HABTM «Избранное» и «Фаворит» HABTM «Лица»

Мне нужно найти человека, который имеет все перечисленные «Избранные. Например, найти человека, который любит„музыку“,„путешествия“и„спорт“.

Как это может с использованием метода ActiveRecord.find?

ответ

5
@people = Person.find(:all, 
    :joins => :favourites, 
    :select => "person.*, count(favourites) favourite_count", 
    :conditions => {:favourites => @array_of_favourites}, 
    :group => "persons.id having favourite_count = #{@array_of_favourites.count}") 

Вам нужно что-то подобное, чтобы найти людей с все, избранные, а не любые комбинации избранные. Это основано на предположении, что у вас есть массив избранных объектов, а не набор строк.

Rails 4 совместимое решение:

@people = Person.joins(:favourites) 
    .where(favourites: { id: @array_of_favourites }) 
    .group("people.id") 
    .having("count(favourites.id) = #{@array_of_favourites.count}") 
+0

Благодарности. Хорошее решение – AntonAL

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