Rails自定义SQL查询不能与find_by_sql一起使用

时间:2013-12-04 12:10:48

标签: sql ruby-on-rails ruby find-by-sql

我的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作为输入。

1 个答案:

答案 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