2012-02-06 34 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