2012-12-13 73 views
0
'SELECT "complaints".* FROM "complaints" INNER JOIN "machines" ON "machines"."id" = "complaints"."machine_id" INNER JOIN "mclns" ON "machines"."mcln_id" = "mclns"."id" ORDER BY "mclns"."response_time" ASC' 

我需要上面的SQL轉換爲活動記錄聲明與多級轉換SQL連接到Rails的ActiveRecord表達

complaint模型不知道mcln 它要經過machine

Complaint.joins(:machine=>:mcln)給出

SELECT "complaints".* FROM "complaints" INNER JOIN "machines" ON "machines"."id" = "complaints"."machine_id" INNER JOIN "mclns" ON "mclns"."machine_id" = "machines"."id" 

但我需要

SELECT "complaints".* FROM "complaints" INNER JOIN "machines" ON "machines"."id" = "complaints"."machine_id" INNER JOIN "mclns" ON "machines"."mcln_id" = "mclns"."id" 

更新:

一臺機器可以有一個mcln也有許多機器可以有相同的mcln。

我已經通過使用Machine模型

has_one :mclnbelongs_to :machine實現它Mcln

而且我不知道如果多數民衆贊成正確實施。

+0

你有機器和mcln之間有什麼關聯? –

+0

好吧,我不知道究竟要調用它,但我認爲它是一對多,一臺機器可以有一個mcln,也有很多機器可以有相同的mcln,我已經通過在machine model和belongs_to上使用has_one:mcln來實現它:我不知道這是否正確實施 – pahnin

回答

0

你的關聯是不正確。如果許多機器可以有相同的mcln那麼機臺應該有一個mcln_id列,你的類應該像

class Machine < AR::Base 
    belongs_to :mcln 
end 

class Mcln < AR::Base 
    has_many :machines 
end 

然後Complaint.joins(:machine => :mcln)應該生成你想要的SQL

+0

雅的工作,我的朋友剛剛得到解決它:) – pahnin

0

試試這個:

SELECT complaints.*,machines.*,mclns.* FROM `complaints` 
INNER JOIN `machines` 
ON (machines.id = complaints.machine_id) 
INNER JOIN `mclns` 
(ON machines.mcln_id = mclns.id) 
+0

對不起,但我不認爲你理解這個問題,我不需要一個SQL語句我需要像'Complaint.joins(:machine =>:mcln)''''''''''''但是謝謝無論如何試圖幫助 – pahnin