2017-07-28 19 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]]''。由於記錄數很多,導致性能低下。 –

相關問題