Я пытаюсь создать поиск, в котором одна запись должна иметь несколько записей в другой таблице (связанных по идентификаторам и операторам has_many
), чтобы быть включенной в результат.
У меня есть таблицы users
, skill_lists
, skill_maps
.
пользователи сопоставляются с индивидуальными навыками с помощью отдельных записей в таблице skill_maps
. Многие пользователи могут использовать один навык, а один пользователь может иметь несколько навыков через несколько записей в таблице skill_maps
.
, например
User_id | Skill_list_id
2 | 9
2 | 15
3 | 9
У пользователя 2 есть навыки 9 и 15
пользователь 3 имеет только навык 9
Я пытаюсь создать поиск, который возвращает хэш всех пользователей, имеющих набор навыков. Набор обязательных skill_ids
отображается в виде массива в параметрах.
Вот код, который я использую:
skill_selection_user_ids = SkillMap.find_all_by_skill_list_id(params[:skill_ids]).map(&:user_id)
@results = User.find(:all, :conditions => {:id => skill_selection_user_ids})
Проблема в том, что возвращаются все пользователи, которые ЛЮБЫЕ из этих навыков, а не пользователи, которые имеют ВСЕ их.
Кроме того, моя таблица пользователей связана с таблицей skill_lists :through => :skill_maps
и наоборот, так что я могу звонить @user.skill_list
и т. Д. *
Я уверен, что это настоящий вопрос новичка, я совершенно новичок в рельсах (и программировании). Я искал и искал решение, но не мог ничего найти. Я действительно не знаю, как объяснить проблему в одном поисковом запросе.