首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命名作用域与find_by_sql (特定示例)

命名作用域与find_by_sql (特定示例)
EN

Stack Overflow用户
提问于 2009-12-04 23:19:14
回答 1查看 1.4K关注 0票数 0

出于好奇,有没有人知道使用命名作用域(相对于find_by_sql)构建以下集合的更好方法?

代码语言:javascript
复制
@available = Workflow.find_by_sql(["
      SELECT workflows.id FROM workflows
      WHERE workflows.project_id = ? AND workflows.status < 5 AND
      ( workflows.created_by = ? OR workflows.id IN 
        (
           SELECT workflow_id FROM workflow_histories   
           INNER JOIN workflow_recipients on workflow_histories.id = workflow_recipients.workflow_history_id   
           WHERE workflow_recipients.recipient_id = ? AND workflow_recipients.recipient_type = ?
        )
      )", project.id, @current_user.id,  @current_user.id , 'USER'])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-04 23:35:38

我还没有测试过,但我认为它会起作用:

代码语言:javascript
复制
named_scope :available, lambda { |user_id, project_id|
  { :select => :id,
    :conditions =>  [ "project_id = :project_id AND status < 5 AND
                       (created_by = :user_id OR id IN (
                         SELECT workflow_id FROM workflow_histories   
                         INNER JOIN workflow_recipients ON workflow_histories.id = workflow_recipients.workflow_history_id   
                         WHERE workflow_recipients.recipient_id = :user_id AND workflow_recipients.recipient_type = :recipient_type
                       )",
                      { :user_id        => user_id,
                        :project_id     => project_id,
                        :recipient_type => "USER"
                      }
                    ]
  }    
}

(我的答案的前一个版本将子选择分解为它自己的查询,我认为这是不必要的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1847625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档