2017-06-19 10 views
0

私は玩具とToyPart ActiveRecordのクラスを持っています。おもちゃhas_may ToyPartの関係。 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つのToyPartの結果を持っています。

私は、Rubyへとon Railsの新たなんです。すべてのレコードを配列に変換する私はそれが膨大なプロセスであり、ループ内で別のクエリを実行するとコストがさらに増加すると考えています。

to_aは良いアイデアではありません。改善のために何ができるでしょうか?

P.S:私はレール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

喜んで助けました。 –

関連する問題