在与Squeel相同的关联上执行多个连接

时间:2012-06-07 08:21:54

标签: ruby-on-rails join associations squeel

在我的应用程序中,我必须建模:工作流程和步骤;步骤belongs_to工作流程和工作流has_many步骤。步骤具有索引和布尔状态(“已完成”)。 我想检索其步骤1已完成且第2步未完成的工作流程,即SQL中的类似内容:

SELECT * FROM workflows w
INNER JOIN steps s1 ON s1.workflow_id = w.id
INNER JOIN steps s2 ON s2.workflow_id = w.id
WHERE s1.index = 1 AND s1.completed = 1
AND s2.index = 2 AND s2.completed = 0

我试图用Squeel表达这个查询,但它似乎不允许在同一个关联上进行多个连接:我找不到一种方法来命名连接,当我输入这样的内容时:{{1} },生成的SQL只是:

Workflow.joins{steps}.joins{steps}

知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

我不知道你是否会喜欢它,但可以通过自我引用来实现:

Workflow.joins{steps.workfolw.steps}.
  where{(steps.index == 1) & (steps.completed == true)} &
        (steps.workfolw.steps.index == 2) & (steps.workfolw.steps.completed == false)}.
  uniq