2

在我的应用程序中,我必须建模:工作流和步骤;步骤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 来表达这个查询,但它似乎不允许在同一个关联上进行多个连接:我找不到命名连接的方法,当我输入类似这样的内容时Workflow.joins{steps}.joins{steps},生成的 SQL 很简单:

SELECT `workflows`.* FROM `workflows` 
INNER JOIN `workflow_steps` ON `workflow_steps`.`workflow_id` = `workflows`.`id`

知道如何实现吗?

4

1 回答 1

1

我不知道你是否会喜欢它,但可以通过自我参考:

Workflow.joins{steps.workfolw.steps}.
  where{(steps.index == 1) & (steps.completed == true)} &
        (steps.workfolw.steps.index == 2) & (steps.workfolw.steps.completed == false)}.
  uniq
于 2012-06-07T11:29:43.187 回答