0

*重写了整个问题,这样会更清楚..

这就是我的表的样子(没有无用的列)我用 pgadmin 生成了这个

在此处输入图像描述

SELECT 
  notifications.id
FROM 
  activities, 
  notifications, 
  comments
WHERE 
  activities.trackable_id = comments.id AND
  notifications.activity_id = activities.id;

使用 pgadmin,这个查询给出了正确的结果。

我不知道如何使用包含(或者可能是连接)来拥有 3 个表作为上面的 sql。

我的尝试

@notifications = current_user.notifications.includes(:activity, :comments).where("activities.trackable_id = comments.id AND notifications.activity_id = activities.id")

没有成果

4

1 回答 1

1

默认情况下,当您通过 ActiveRecord::Base#joins 命名关联时,它将使用可能的主键执行 INNER JOIN。正如我们在您的模型中看到的那样,ID 并不是默认方式,因此您可以区分将使用哪个键来连接joins方法内的表。有点像这样:

@notifications = current_user.notifications.
  joins("INNER JOIN activities ON notifications.activity_id = activities.id").
  joins("INNER JOIN comments ON activities.trackable_id = comments.id")
于 2013-02-05T18:10:04.333 回答