2017-01-15 39 views
0

我有User模型,has_many技能。我需要让用户匹配所有选定的技能。例如:搜索匹配所有协会

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) 

如果在搜索时不允许的话。你能帮忙怎么让它在ActiveRecord &在DB级别运行

我的意见:它不能实现使用ransack params,如果你知道Native Query匹配所有关联,让我知道吗?

回答

0

我似乎无法找到一种方法来查询直接通过的Postgres包含但下面将工作:

​​

如果你知道你要多少技能要查询的时间提前,您可以将它们全部组合成一个查询:

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