2012-04-03 53 views
1

我试图让我的ActiveRecord查询更有效率。我有用户和项目,用户对项目有一种感觉,并带有布尔响应。如何将所有数据保存在has_many中:通过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 

这是所有罚款。我想要的是,上述两个查询在一个结果集中的组合。理想情况下,我希望能够查询用户项目的列表,并用这些结果获取他们对每个项目的响应。

如果这是直接的SQL,我可以这样做:

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

这就给了我一切,我需要在一个表中。这也是ActiveRecord在查询User.find(1).items时所做的,除了它在创建我的结果散列值之前抛弃感情表中的数据。

我该如何阻止它抛出intermediatry数据,从而为我节省额外的数据库查询?

任何帮助表示赞赏!

回答

2

你可以用它写这样的Rails 3中,

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

,并在轨道2,

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

这通常会导致两个查询。一个选择感受,另一个选择项目。

相关问题