我的Rails应用程序中有三个表用户,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将作为红宝石阵列提供[1,4]。
现在,我想为我的rails应用程序编写这个SQL查询。但是当我在rails中使用find_by_sql
语句执行此查询时,它返回正确的no。特定user_ids所属的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)
但是,问题在于,如何使用String替换技术来使用给定的user_ids作为输入。
答案 0 :(得分: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