【发布时间】:2020-06-21 20:44:46
【问题描述】:
我有 3 张桌子:
- 播放列表 has_many :tracks
- 曲目 belongs_to :playlist, has_many :answers
- 答案 belongs_to :track
一个播放列表有一个主题(不是唯一的,多个播放列表可能有相同的主题) 答案有一个状态:真或假
我想查询给定主题的真实答案。
理论上,这应该可行:
Track.joins(:answers).where(answers:{status:true}).joins(:playlist).where(playlists:{theme: myGivenTheme})
实际上,它可以在包括 .joins(:playlist) 的情况下工作,但每当我添加 where(playlists:...) 条件时都会失败。 我已经尝试过 Track.includes(:playlist) 来尝试适应 belongs_to,但也失败了,出现以下错误消息:
Track.joins(:answers).where(answers:{status:true}).joins(:playlist).where(playlist:{name:'French'}).count
(2.1ms) SELECT COUNT(*) FROM "tracks" INNER JOIN "answers" ON "answers"."track_id" = "tracks"."id" INNER JOIN "playlists" ON "playlists"."id" = "tracks"."playlist_id" WHERE "answers"."status" = $1 AND "playlist"."name" = $2 [["status", true], ["name", "French"]]
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "playlist"
LINE 1: ..."."playlist_id" WHERE "answers"."status" = $1 AND "playlist"...
^
from /Users/pierre/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:672:in `exec_params'
Caused by PG::UndefinedTable: ERROR: missing FROM-clause entry for table "playlist"
LINE 1: ..."."playlist_id" WHERE "answers"."status" = $1 AND "playlist"...
^
from /Users/pierre/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:672:in `exec_params'
【问题讨论】:
-
失败怎么办?是否有错误消息或结果集与您的期望不符?
-
我现在在主要问题上添加错误消息
标签: join activerecord ruby-on-rails-6