2012-02-06 71 views
2

我有两个模型/表A和B.我想执行一个活动记录查询,其结果包括来自两个表中的列。我试过inner joins,因为它们听起来像是将两张表的列组合在一起。但是,尝试使用Active Record joins finder方法仅返回来自第一个表的结果。一般活动记录加入或包括

什么活动记录查询包含结果中两个表的列?或许includes查找方法可能有所帮助。

编辑:将两个表视为ForumThreads和Posts。每个论坛主题都有多个帖子。我希望查询结果中的行包含每个帖子的信息和论坛帖子的信息(例如帖子标题)。

这个问题可能已经回答了我的问题:Rails Joins and include columns from joins table

+2

你可以对你想要做什么更具体的? 'includes'会急切加载数据。但是'ActiveRecord'会隐藏你的结果,只返回数组中的父对象。 “关系”已加载,但您没有在结果中看到它们。详细说明你如何尝试使用这些数据。 – Azolo 2012-02-06 21:24:01

+0

@Azolo用更多的信息更新了这个问题。 – SundayMonday 2012-02-06 21:28:09

+1

@Gazler了解它,使用'include' – Azolo 2012-02-06 21:31:03

回答

9

Joins执行内部联接,但直到你问它不会返回数据。

User.where(:id => 1).joins(:client_applications) 
User Load (0.2ms) SELECT "users".* FROM "users" INNER JOIN "client_applications" ON "client_applications"."user_id" = "users"."id" WHERE "users"."id" = 1 

Includes将执行两个查询(如使用)和缓存相关的数据(预先加载)

User.where(:id => 1).includes(:client_applications) 
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 
    ClientApplication Load (13.6ms) SELECT "client_applications".* FROM "client_applications" WHERE "client_applications"."user_id" IN (1) 
+0

我试过使用'includes',但查询结果仍然只有第一个表的列。请发布具有两个表结果的示例查询。 – SundayMonday 2012-02-06 22:24:52

+1

@MrMusic您仍然需要请求资源。在我上面的例子中,你可以做'users = User.where(:id => 1).includes(:client_applications)'然后当你需要客户端应用程序时,你可以执行'users.first.client_applications',它会从初始查询的缓存结果中检索它们。 – Gazler 2012-02-06 22:27:16