2017-06-19 49 views
0

我有一個Toy和ToyPart ActiveRecord類。玩具has_may玩具部分關係。 ToyPart ActiveRecord有一個描述ToyPart的內容字段和一個簡短描述ToyPart的type_desc字段。基於has_many關係獲取ActiveRecord結果

我需要根據ToyPart的內容和type_desc字段獲取所有玩具記錄。我做了以下聲明以獲得結果:

Toy.all.to_a.toy_parts do {|toy_part| toy_part.where("content like (?) and type_desc='arm'", "%Left arm from%" } 

此查詢花費太多時間返回結果。玩具表有270000多條記錄,每個玩具至少有5個玩具部分結果。我不熟悉Ruby和Rails。將所有記錄轉換爲數組我認爲這是一個巨大的過程,並且在循環中進行另一個查詢,成本增加得更多。

to_a不是一個好主意。爲了減輕處理,我可以做些什麼來改善?

P.S:我正在使用rails 4.2.6。

+1

任何具有「%something%」的搜索都會很長。你的代碼中發生的事情是,你實際上一遍又一遍地做這個搜索,使它真的很長。 Atul Khanduri的加入答案意味着您只能創建1個數據庫。 –

回答

3

您是否嘗試過使用joins?類似這樣的:

Toy.joins(:toy_parts).where("toy_parts.content like (?) AND toy_parts.type_desc='arm'", "%Left arm from%"") 
+0

這就是我要找的。 – learner

+0

很高興幫助。 –