0

*より明確になるように、質問全体を書き直しました..

これは私のテーブルがどのように見えるかです(役に立たない列はありません)私はpgadminでこれを生成しました

ここに画像の説明を入力

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

pgadmin を使用すると、このクエリで正しい結果が得られます。

上記のSQLのように、インクルード(またはおそらく結合)を使用して3つのテーブルを作成する方法がわかりません。

私の試み

@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 に答える