Sql Rails活动记录内部联接不工作

Sql Rails活动记录内部联接不工作,sql,ruby-on-rails,ruby-on-rails-3,activerecord,Sql,Ruby On Rails,Ruby On Rails 3,Activerecord,我有三种模式:跑步者,工作,和调查。Runnermodel有许多作业。作业模型有一个调查。我正在尝试获取一名跑步者的所有调查(所有与属于特定跑步者的工作相关的调查) 这是我的模型 runner.rb class Runner < ActiveRecord::Base has_many :jobs end class Runner < ActiveRecord::Base has_many :jobs has_many :surveys, through: :jobs e

我有三种模式:
跑步者
工作
,和
调查
Runner
model
有许多作业。
作业
模型
有一个
调查
。我正在尝试获取一名跑步者的所有调查(所有与属于特定跑步者的工作相关的调查)

这是我的模型

runner.rb

class Runner < ActiveRecord::Base
  has_many :jobs
end
class Runner < ActiveRecord::Base
  has_many :jobs
  has_many :surveys, through: :jobs
end
这看起来像是输出了正确的SQL,但每当我运行Join_table时,它所做的就是返回作业。它不会返回Job和Survey的联接表。我还尝试了以下方法

joined_table = Job.all(:include => :survey)
joined_table = Job.all(:select => '*', :joins => :survey)
joined_table = Job.all(:joins => :assignment, :include => :survey)
这三种方法都不管用

我相信你想要的

Survey.joins(:job).where(jobs: { runner_id: runner.id })
这将为您提供属于相关跑步者的作业的所有
调查对象。

尝试一下:

runner.rb

class Runner < ActiveRecord::Base
  has_many :jobs
end
class Runner < ActiveRecord::Base
  has_many :jobs
  has_many :surveys, through: :jobs
end

如果模型上指定了关系,那么joins将自动检测外键,整个where是多余的;我们只加入了
作业的子集
,我们需要指定子集。真不敢相信我没有想到会给出Aguardientico的答案(这显然是正确的)!但我还是把它留在这里,因为它仍然是如何编写OP尝试执行的连接查询的示例。
class Runner < ActiveRecord::Base
  has_many :jobs
  has_many :surveys, through: :jobs
end
runner = Runner.first
runner.surveys