2013-06-25 35 views
0

我有3個機型:Runners,JobsSurveysRunner模型has_many工作。 Job型號has_oneSurvey。我正在嘗試獲得所有跑步者調查(所有與屬於特定跑步者的工作相關的調查)。導軌有效記錄內部連接不工作

這裏是我的模型

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 

爲了獲取所有作業一個跑步者,我打開了軌道控制檯並嘗試運行這樣的命令。

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

這看起來像它輸出正確的SQL,但每當我跑joined_table,它的作用是返回回Job.all。它不返回Job和Survey的連接表。我也試過以下

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

這些都不3個工作要麼

回答

1

試用一下吧:

runner.rb

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

然後

runner = Runner.first 
runner.surveys 
+0

這就是它。謝謝你,這麼容易! – user2158382

0

我相信你想

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

這應該給你屬於屬於亞軍作業中的所有Survey對象有問題。

+0

加入如果在模型中指定的關係將自動檢測foreign_key,你的整個哪裏是多餘的。 – bluehallu

+0

不,不是;我們只加入了'jobs'的子集,我們需要指定子集。 – gregates

+0

不敢相信我沒有想到給Aguardientico的答案(這顯然是正確的)!但是我仍然會留在這裏,因爲它仍然是如何編寫OP試圖執行的連接查詢的示例。 – gregates