Sql Rails ActiveRecord查询以匹配所有参数
我需要一个ActiveRecord Postgres查询,该查询返回与通过数组传入的所有参数匹配的结果 一些背景:我有一个用户模型,它有许多主题(通过专业)。我将主题ID作为字符串(Sql Rails ActiveRecord查询以匹配所有参数,sql,ruby-on-rails,ruby,postgresql,activerecord,Sql,Ruby On Rails,Ruby,Postgresql,Activerecord,我需要一个ActiveRecord Postgres查询,该查询返回与通过数组传入的所有参数匹配的结果 一些背景:我有一个用户模型,它有许多主题(通过专业)。我将主题ID作为字符串(参数:{“topics”=>“1,8,3”})传递,然后使用.split(',')将它们转换为一个数组,因此我最终使用主题参数=[“1”,“8”,“3”] 现在,我尝试返回所有主题匹配/包含所有这些主题的用户。遵循中的答案后,我设法返回与以下主题匹配的用户: @users = User.includes(:topic
参数:{“topics”=>“1,8,3”}
)传递,然后使用.split(',')
将它们转换为一个数组,因此我最终使用主题参数=[“1”,“8”,“3”]
现在,我尝试返回所有主题匹配/包含所有这些主题的用户。遵循中的答案后,我设法返回与以下主题匹配的用户:
@users = User.includes(:topics, :organization).where(:topics => {:id => topic_params})
但我需要它来返回所有匹配的结果。总的来说,我也愿意找到更好的方法来完成这类任务。一种方法就是这样
User.joins(:topics).where(topics: { id: [1, 2, 3] }).group('users.id').having('count(distinct topics.id) = 3')
显然,我没有您的确切模式,因此您可能需要对其进行一些调整,但这是基本设置
重要的是having子句计数器必须与您要匹配的项目数匹配。一种方法是这样的
User.joins(:topics).where(topics: { id: [1, 2, 3] }).group('users.id').having('count(distinct topics.id) = 3')
显然,我没有您的确切模式,因此您可能需要对其进行一些调整,但这是基本设置
重要的是having子句计数器必须与您匹配的项目数相匹配。@Iceman,谢谢您的链接。在这个实例中,我将如何以ActiveRecord格式编写它?ActiveRecord有
和to_sql
方法来帮助您。@muistooshort,谢谢您提供的信息。我该如何利用它们?@Iceman,谢谢你的链接。在这个实例中,我将如何以ActiveRecord格式编写它?ActiveRecord有和to_sql
方法来帮助您。@muistooshort,谢谢您提供的信息。我将如何利用它们?我将如何反映要匹配的项目数量是可变的?这意味着它可以从1到10(而不是设置为3)。有('count(distinct topics.id)=?',topic_params.split(',').count)或类似的内容。还有一个问题:是否有办法快速加载其他表,因为如果可能的话,我愿意这样做。看看这个问题,我如何反映要匹配的项目数是可变的?这意味着它可以从1到10(而不是设置为3)。有('count(distinct topics.id)=?',topic_params.split(',').count)或类似的内容。还有一个问题:是否有一种方法可以快速加载其他表,因为如果可能的话,我想这样做