【问题标题】:Rails find_by in a lower hierarchy levelRails find_by 在较低的层次结构级别
【发布时间】:2012-07-01 15:19:37
【问题描述】:

我有以下型号:

Company has_many Employees has_many Projects

Projects have a deadline:dateTime

现在我想用一个生成单个 SQL 的语句来获取给定公司的任何项目的下一个截止日期。

def get_next_deadline
   * * * select deadline from projects where employee_id in (employees.each |i| )) * * *
end

我不想要的是遍历所有公司员工并检查下一个截止日期,为每个员工访问一次数据库。

有没有比

更优雅的 find 命令
find_by_sql?

【问题讨论】:

    标签: sql ruby-on-rails ruby has-many find-by-sql


    【解决方案1】:

    如果你添加

    has_many :projects, :through => :employees
    

    你的公司模式,那么你可以做

    some_company.projects.order('deadline').first
    

    找到该公司第一个截止日期的项目

    【讨论】:

    • 不错,更优雅!但是为什么需要在员工和项目之间进行内部连接。像我在问题中概述的那样生成“WHERE...IN”查询不是更聪明吗?
    • 子查询通常比内部连接慢,因为第一个查询是获取 id 列表,然后是带有 IN 子句的第二个查询(特别是如果员工列表很长)。但如果有疑问,请进行基准测试!
    猜你喜欢
    • 2013-07-04
    • 2023-04-03
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2015-06-25
    相关资源
    最近更新 更多