【问题标题】:Performing multiple joins on the same association with Squeel使用 Squeel 在同一个关联上执行多个连接
【发布时间】:2012-06-11 07:03:27
【问题描述】:

在我的应用程序中,我必须建模:工作流和步骤;步骤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`

知道如何实现吗?

【问题讨论】:

    标签: ruby-on-rails join associations squeel


    【解决方案1】:

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

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

    【讨论】:

    • 有趣。我会试一试(我的系统实际上比我描述的要复杂一些)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多