Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails ActiveRecord查询以匹配所有参数_Sql_Ruby On Rails_Ruby_Postgresql_Activerecord - Fatal编程技术网

Sql Rails ActiveRecord查询以匹配所有参数

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

我需要一个ActiveRecord Postgres查询,该查询返回与通过数组传入的所有参数匹配的结果

一些背景:我有一个用户模型,它有许多主题(通过专业)。我将主题ID作为字符串(
参数:{“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)或类似的内容。还有一个问题:是否有一种方法可以快速加载其他表,因为如果可能的话,我想这样做