我有3个模型:Runners
,Jobs
和Surveys
。 Runner
模型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个都不起作用
答案 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
个对象。