【问题标题】:How i can write a query inside select in rails我如何在 Rails 中的 select 中编写查询
【发布时间】:2013-09-09 11:53:45
【问题描述】:

如何在 Ruby on Rails 中编写此查询?在 select 中查询

SELECT id, 
       company_id, 
       (SELECT name 
        FROM   companies 
        WHERE  id = referred_to_id) AS name 
FROM   referrals 
WHERE  company_id = 21 

【问题讨论】:

  • 欢迎来到 Stack Overflow!请阅读newbie manual 了解如何写出更好的问题。例如,您应该说明您拥有哪些模型以及您已经尝试过哪些模型。
  • 您可以使用联接而不是子选择重写该查询。

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord activemodel


【解决方案1】:

在 Rails 中,您不必担心编写这样的 SQL。 ActiveRecord 处理所有简单 SQL 命令的创建。

只要您在模型中正确设置了关系,下面的代码就会为您提供公司名称。

@referral = Referral.find(21)
@referral.company.name

看到这个tutorial on Active Record Associations

【讨论】:

    【解决方案2】:
    @referrals = Referral.select('id, company_id, (SELECT name FROM companies WHERE  id = referred_to_id) AS name').where(company_id: 21)
    

    【讨论】:

      【解决方案3】:
      @referral = Referral.joins(:company).select([:id,:company_id]).where(id: 21).first
      

      然后使用

      @referral.id
      @referral.company_id
      @referral.company.name
      

      【讨论】:

        【解决方案4】:

        使用 activerecord,您可以通过以下方式实现:

        referral = Referral.find(21)
        referral.company.name
        

        但如果你真的想要面对这些属性,你可以使用:

        record = Referral.where("referrals.company_id = 21").joins("left join companies on referrals.referred_to_id = companies.id").select("referrals.id , referrals.company_id, companies.name as name").first
        

        现在您可以通过以下方式访问该特殊对象的属性:

        record.id
        record.company_id
        record.name
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          • 2011-10-30
          • 1970-01-01
          • 2017-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多