Rails Active Record内部连接不起作用

时间:2013-06-25 19:37:06

标签: sql ruby-on-rails ruby-on-rails-3 activerecord

我有3个模型:RunnersJobsSurveysRunner模型has_many个工作。 Job模型has_one Survey。我正在尝试为跑步者进行所有调查(所有与属于特定跑步者的工作相关的调查)。

以下是我的模特

runner.rb

class Runner < ActiveRecord::Base
  has_many :jobs
end

job.rb

class Job < ActiveRecord::Base
  belongs_to :runner
  has_one :survey
end

survey.rb

class Survey < ActiveRecord::Base
  attr_accessible :service, :speed, :suggestion, :job_id
  belongs_to :job
end

为了获得跑步者的所有工作,我打开了rails控制台并尝试运行这样的命令。

runner = Runner.first
joined_table = Job.joins(:survey)
joined_table.where(runner_id: runner.id)

这看起来像输出正确的SQL,但每当我运行joined_table时,它所做的就是返回Job.all。它不会返回Job and Survey的联合表。我也试过以下

joined_table = Job.all(:include => :survey)
joined_table = Job.all(:select => '*', :joins => :survey)
joined_table = Job.all(:joins => :assignment, :include => :survey)

这3个都不起作用

2 个答案:

答案 0 :(得分:1)

尝试一下:

runner.rb

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

然后

runner = Runner.first
runner.surveys

答案 1 :(得分:0)

我相信你想要

Survey.joins(:job).where(jobs: { runner_id: runner.id })

这应该为您提供属于有问题的跑步者的所有Survey个对象。