我使用的是PublicActivity gem:activity
我使用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
我不确定如何(甚至可能)加入、包括或预加载多个“可跟踪”类型的多态模型。
发布于 2014-07-19 12:25:56
我认为这在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 }https://stackoverflow.com/questions/24824529
复制相似问题