2

我使用PublicActivity寶石多態模型:https://github.com/pokonski/public_activity如何加入與使用PublicActivity寶石

我所用PublicActivity模型的跟蹤使用的列edition_id。我想知道如何通過該列來擴大範圍,因爲它是多態關係。

如PublicActivity看起來像這樣:

PublicActivity::Activity.limit(50)

+----+--------------+----------------+----------+------------+--------------------+------------+--------------+----------------+---------------------------+---------------------------+ 
| id | trackable_id | trackable_type | owner_id | owner_type | key    | parameters | recipient_id | recipient_type | created_at    | updated_at    | 
+----+--------------+----------------+----------+------------+--------------------+------------+--------------+----------------+---------------------------+---------------------------+ 
| 1 | 42   | QuizMaster  | 6  | User  | quiz_master.update | {}   |    |    | 2013-04-12 17:33:14 +0100 | 2013-04-12 17:33:14 +0100 | 
| 2 | 25   | Place   | 6  | User  | place.update  | {}   |    |    | 2013-04-12 17:42:42 +0100 | 2013-04-12 17:42:42 +0100 | 
| 3 | 25   | Event   | 6  | User  | event.update  | {}   |    |    | 2013-04-12 17:45:08 +0100 | 2013-04-12 17:45:08 +0100 | 
| 4 | 20   | QuizMaster  | 6  | User  | quiz_master.update | {}   |    |    | 2013-04-12 17:49:09 +0100 | 2013-04-12 17:49:09 +0100 | 
| 5 | 20   | QuizMaster  | 6  | User  | quiz_master.update | {}   |    |    | 2013-04-12 17:50:51 +0100 | 2013-04-12 17:50:51 +0100 | 
+----+--------------+----------------+----------+------------+--------------------+------------+--------------+----------------+---------------------------+---------------------------+ 

凡edition_id是多態跟蹤的關係。

我想這樣做是這樣的:

PublicActivity::Activity.limit(50).includes(:trackable)# where trackable edition = 1

我不知道如何,甚至是否有可能加入或包括或預裝在多個「可跟蹤」類型多態模型。

+1

你能解釋一下你試圖達到什麼嗎?最終發佈一個例子,說明你在開始時的所作所爲,以及最後想要的。另外,我沒有在轉儲的數據中看到'edition_id'列 – MrYoshiji

+0

已更新爲嘗試並更具體地感謝... – ere

+0

您可以發佈在執行'PublicActivity :: Activity.limit(10).joins時觸發的SQL查詢(:可追蹤)'請嗎? – MrYoshiji

回答

2

我不認爲這是可以直接使用SQL,因爲多態性,但你可以輕鬆地用ruby做些事情。

PublicActivity::Activity.limit(50).select {|c| c.trackable.edition_id = 1 } 

這不會是一個SQL查詢語句一樣高效,但使用Rails preload它很可能會不夠好,這取決於您要提取的記錄數。

PublicActivity::Activity.limit(50).preload(:trackable).select {|c| c.trackable.edition_id = 1 }