2012-06-07 34 views
2

在我的應用程序中,我必須模型:工作流和步驟;步驟belongs_to工作流程和工作流程has_many步驟。步驟有一個索引和一個布爾狀態('完成')。 我想要檢索的工作流程,其完成步驟1和步驟2不大,即SQL是這樣的:在與Squeel相同的關聯上執行多個連接

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` 

任何想法如何,我可以做到這一點?

回答

1

我不知道你是否會喜歡它,但它通過自我參照是可能的:

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

有趣。我會試一試(我的系統實際上比我描述的要複雜一點)。 – Dom

相關問題