1

ActiveRecord クエリをより効率的にしようとしています。ユーザーとアイテムがあり、ユーザーはブール値の応答でアイテムについて感じています。

ここに私のモデルがあります:

ユーザー:

has_many :feelings
has_many :items, :through => :feelings

フィーリング:

belongs_to :user
belongs_to :item
attr_accessible :response

アイテム:

attr_accessible :name

したがって、次の方法でユーザーの感情のリストを取得できます。

User.find(1).feelings

そして、彼が感じているアイテムのリストを次の方法で取得できます。

User.find(1).items

これで問題ありません。私が望むのは、上記の 2 つのクエリを 1 つの結果セットに組み合わせることです。理想的には、ユーザーのアイテムのリストを照会し、それらの結果で各アイテムに対する応答を取得できるようにしたいと考えています。

これが単純な SQL である場合、次のことができます。

SELECT * FROM items INNER JOIN feelings ON items.id=feelings.item_id WHERE feelings.user_id = 1

これにより、必要なものがすべて 1 つのテーブルに表示されます。これは、クエリを実行するときに ActiveRecord が行うことでもありUser.find(1).itemsますが、結果のハッシュを作成する前に、フィーリング テーブルのデータを破棄します。

中間データの破棄を停止して、余分なデータベース クエリを節約するにはどうすればよいですか?

どんな助けでも大歓迎です!

4

1 に答える 1

1

Rails 3 では、このように記述して使用できます。

User.find(1).feelings.includes(:item)

Rails 2では、

User.find(1).feelings.find(:all, :include => :item)

通常、これにより 2 つのクエリが発生します。一人は感情を選択し、もう一人は項目を選択します。

于 2012-04-04T00:08:53.700 に答える