一般活动记录加入或包括
我有两个模型/表A和B.我想执行一个活动记录查询,其结果包括来自两个表中的列。我试过inner joins,因为它们听起来像是将两张表的列组合在一起。但是,尝试使用Active Record joins
finder方法仅返回来自第一个表的结果。一般活动记录加入或包括
什么活动记录查询包含结果中两个表的列?或许includes
查找方法可能有所帮助。
编辑:将两个表视为ForumThreads和Posts。每个论坛主题都有多个帖子。我希望查询结果中的行包含每个帖子的信息和论坛帖子的信息(例如帖子标题)。
这个问题可能已经回答了我的问题:Rails Joins and include columns from joins table
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)
我试过使用'includes',但查询结果仍然只有第一个表的列。请发布具有两个表结果的示例查询。 – SundayMonday 2012-02-06 22:24:52
@MrMusic您仍然需要请求资源。在我上面的例子中,你可以做'users = User.where(:id => 1).includes(:client_applications)'然后当你需要客户端应用程序时,你可以执行'users.first.client_applications',它会从初始查询的缓存结果中检索它们。 – Gazler 2012-02-06 22:27:16
你可以对你想要做什么更具体的? 'includes'会急切加载数据。但是'ActiveRecord'会隐藏你的结果,只返回数组中的父对象。 “关系”已加载,但您没有在结果中看到它们。详细说明你如何尝试使用这些数据。 – Azolo 2012-02-06 21:24:01
@Azolo用更多的信息更新了这个问题。 – SundayMonday 2012-02-06 21:28:09
@Gazler了解它,使用'include' – Azolo 2012-02-06 21:31:03