У меня есть модель User со столбцами для Local, Skype и Phone (логическое значение, 't' или 'f') и Gender (строка, 'Male' или 'Female'). Каждый пользователь может иметь много навыков в соответствующей модели SkillMap, которая имеет skill_id и направление (строка, либо «Teach», либо «learn»)
Я возился с MetaWhere, Squeel и RanSack, пытаясь выяснить, что позволит мне искать этих пользователей самым приятным, читаемым и похожим на рельсы способом. Может кто-нибудь указать мне наиболее подходящий драгоценный камень и, возможно, дать мне несколько советов о том, как его построить?
В настоящее время каждый раз при выполнении поиска в таблице поиска создается объект, подобный приведенному ниже (извините за плохое форматирование, я не знаю, как сохранить массив без этих черточек)
id|user_id|skype|local|phone|teach_skill_ids|learn_skill_ids|gender
37|628|t|t|f|---- '795'|---- '789'- '771'- '827'|Male
Итак, в этом случае я хочу найти всех пользователей, у которых флаг скайпа ИЛИ локальный, имеют значение true (игнорируя phone = 'f'), у которых гендерный флаг равен 'Мужской', И у кого есть связанная skill_map, где direction = 'Teach' и skill_id = 795, И у кого есть skill_map, где direction = 'Learn', а skill_id - IN (789,771,827)
Я могу попытаться написать SQL, если это прояснит ситуацию, но я знаю, как это сделать, используя ужасные подзапросы (администраторы могут пропустить эту часть)
SELECT * FROM users
WHERE gender = 'Male'
AND (local = 't' OR skype = 't')
AND id IN
(SELECT user_id FROM skill_maps
WHERE direction = 'Teach'
AND id = 795)
AND id IN
(SELECT user_id from skill_maps
WHERE direction = 'Learn'
AND id IN (789,771,827))
Если какое-либо из этих полей не заполнено или не заполнено, я не хочу включать их в качестве условия поиска.
Во всяком случае, это мой вопрос. Спасибо за взгляд!
Ура,
Yonah