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 转换为 Active Record 语句

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。

我已经通过使用实现了它

has_one :mclnMachine模型 belongs_to :machineMcln

而且我不确定这是否是正确的实施。

4

2 回答 2

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

于 2012-12-13T18:42:27.377 回答
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 回答