在我的应用程序中,我必须建模:工作流程和步骤;步骤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}
知道如何实现这一目标吗?
答案 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