ローカル、Skype、および電話 (ブール値、「t」または「f」) と性別 (文字列、「男性」または「女性」) の列を持つユーザー モデルがあります。各ユーザーは、skill_id と方向 (文字列、「教える」または「学ぶ」のいずれか) を持つ関連付けられた SkillMap モデルで多くのスキルを持つことができます。
私は、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
したがって、この場合、skype または local フラグが true (phone = 'f' を無視) であり、性別フラグが「Male」であり、かつ、関連する skill_map が direction = 'Teach' および skill_id= であるユーザーを見つけたいと考えています。 795、かつ、direction = 'Learn' で skill_id が IN である skill_map を持っている (789,771,827)
それがより明確になるなら、私はSQLを書くことに挑戦することができますが、ひどいサブクエリを使用してそれを行う方法しか知りません(DBAはこの部分をスキップしたいかもしれません)
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))
これらのフィールドのいずれかが空白または false の場合、それらを検索条件として含めたくありません。
とにかく、それは私の質問です。ご覧いただきありがとうございます。
乾杯、ヨナ