2017-07-28 40 views
0

我有这样的代码如何在原始查询中使用动态数组的id(rails + postgres)?

Language.all.map{|l|[l.language, l.accounts.joins(:children).where("accounts.id IN (?)", @accounts.ids).uniq.count]} 

我试图让这个作为输出

[["eng", 5] ["span", 3] ["ital", 4] ... ] 

我想把它写成一个原始查询。

我想这一点,

ActiveRecord::Base.connection.execute("select languages.language, (SELECT COUNT(*) FROM accounts where accounts.language_id = languages.id) from languages").values 

,但我需要通过accounts.ids动态..这样

select languages.language, (SELECT COUNT(*) FROM accounts where accounts.language_id = languages.id AND (accounts.id IN (#{@accounts.ids})) from languages" 

当我试图通过accounts.id IN #{@accounts.ids}我收到错误 (accounts.id IN ([2839, 284.. ..这反而应该是IN (2839, 284..),它正在取数组。

如何动态传递它?

回答

1

你可以试试:

"... accounts.id IN (#{@accounts.ids.join(',')})" 

希望它能帮助。

+0

都能跟得上。得到PG ::语法错误。它需要整个事情作为字符串 –

+0

哦,对不起,我认为你使用Mysql。 – hoangdd

+0

您在查询中忘记了“)”吗? – hoangdd

0

您可以使用where(id: @accounts.ids)where("account.ids": @accounts.ids)where("account.ids IN ?, @accounts.ids)。我相信ActiveRecord应该理解所有这些。

+0

是的。我知道,但我想'映射'另一个表格记录获取特定格式'[[a,b] [c,d]]''。由于记录数很多,导致性能低下。 –

相关问题