2017-01-15 8 views
0

私はUserモデル、has_manyスキルを持っています。私は、選択されたすべてのスキルにユーザーが一致するようにする必要があります。例:ransack match all association

User A: Ruby, HTML, JavaScript. 
User B: Ruby 
User C: Ruby, C++ 

スキルの名前またはIDのリストを使用して検索するとき。私はこのリストのすべての値を持つユーザーを取得する必要があります。したがって、Ruby & Javascriptを使用して検索すると、User Aを取得する必要があります。

ransack gemskills_id_inを使用した場合、すべてのユーザーに返信されます。Rubyスキルがあります。クエリは次のようになります。

SELECT \"users\".* FROM \"users\" LEFT OUTER JOIN \"user_skills\" ON \"user_skills\".\"user_id\" = \"users\".\"id\" LEFT OUTER JOIN \"skills\" ON \"skills\".\"id\" = \"user_skills\".\"skill_id\" WHERE \"skills\".\"id\" IN (1, 3) 

ransackでは許可されていない場合です。あなたは助けることができますどのようにActiveRecordで&を実行すると、データベースレベルで実行

意見:ransack paramsを使用して実装できません。すべての関連付けに一致するネイティブクエリが分かっている場合は教えてください。

答えて

0

私はPostgresのを介して直接含むクエリする方法を見つけるように見えることはできませんが、次のように動作します:

​​

あなたが前もって問い合わせることになるだろうどのように多くのスキルを知っている場合それらをすべて1つのクエリにまとめることができます。

User.joins(:skills).where('? = ANY(name) AND ? = ANY(name)', 'Ruby', 'JavaScript')