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をActiveRecordステートメントに変換する必要があります

complaintmcln モデルはそれが通過しなければならないことを知りません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を持つことができます。

私はそれを使用して実装しました

has_one :mclnMachineモデル belongs_to :machineと_Mcln

そして、それが正しい実装であるかどうかはわかりません。

4

2 に答える 2

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 )
于 2012-12-13T18:12:49.140 に答える
0

関連付けが正しくありません。多くのマシンが同じmclnを持つことができる場合、machinesテーブルにはmcln_id列があり、クラスは次のようになります。

class Machine < AR::Base
  belongs_to :mcln
end

class Mcln < AR::Base
  has_many :machines
end

次にComplaint.joins(:machine => :mcln)、必要なSQLを生成する必要があります

于 2012-12-13T18:42:27.377 に答える