【问题标题】:How to join with a polymorphic model using the PublicActivity gem如何使用 PublicActivity gem 加入多态模型
【发布时间】:2014-07-18 12:00:35
【问题描述】:

我正在使用 PublicActivity gem:https://github.com/pokonski/public_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

我不确定如何甚至是否可以跨多个“可跟踪”类型加入、包含或预加载多态模型。

【问题讨论】:

  • 你能解释一下你想要达到的目标吗?最终发布一个例子,说明你一开始有什么,最后你想要什么。另外,我在转储数据中没有看到edition_id
  • 已更新以尝试更具体,谢谢...
  • 你能把PublicActivity::Activity.limit(10).joins(:trackable)时触发的SQL查询贴出来吗?
  • Cannot eagerly load the polymorphic association :trackable 我可以使用 includespreload 但连接不起作用,我认为这是多态的,需要连接它使用的 4-5 个差异模型。跨度>

标签: ruby-on-rails ruby-on-rails-4 polymorphic-associations public-activity


【解决方案1】:

由于多态性,我认为直接使用 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 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2018-02-13
    • 2021-09-03
    相关资源
    最近更新 更多