我试图让我的 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
的,除了它在创建我的结果散列之前丢弃了感觉表中的数据。
如何阻止它丢弃中间数据,从而为我节省额外的数据库查询?
任何帮助表示赞赏!