1

我的 Rails 应用程序中有三个 Tables 用户 user_groups 和 user_groups_users。现在,我编写了一个 SQL 查询

SELECT user_group_id FROM user_groups_users GROUP BY user_group_id HAVING SUM(CASE WHEN user_id IN (1,4) THEN 1 ELSE 0 END) = COUNT(*)

提取那些 user_group_id,它恰好具有输入提供的 user_ids。在这种情况下,1,4 将作为 ruby​​ 数组 [1,4] 提供。

现在,我想为我的 rails 应用程序编写这个 SQL 查询。但是,当我find_by_sql在 rails 中使用语句执行此查询时,它会返回正确的编号。特定 user_id 所属的 user_groups,但结果不显示 user_group_id。

=> [#<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >]

那么我如何从中提取 User_group_id 。

但是,当我通过直接连接到数据库来执行查询时。我得到了想要的结果

sql = "SELECT user_group_id FROM user_groups_users WHERE user_id IN (1,2) GROUP BY user_group_id HAVING Count(DISTINCT user_id) = 2;"

records_array = ActiveRecord::Base.connection.execute(sql)

但是,这里的问题是,我将如何使用字符串替换技术来使用作为输入的 user_ids。

4

1 回答 1

1

您正在获取对象的数组,因此您需要对其进行迭代循环

user_groups_users = [#<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >, #<UserGroup >]

user_groups_users.map do |user_groups_user|
  puts user_groups_user.user_group_id
end
于 2013-12-04T12:44:54.937 回答