我怎样才能在rails中选择一个查询

时间:2013-09-09 11:53:45

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

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

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

4 个答案:

答案 0 :(得分:3)

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

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

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

请参阅此tutorial on Active Record Associations

答案 1 :(得分:2)

@referrals = Referral.select('id, company_id, (SELECT name FROM companies WHERE  id = referred_to_id) AS name').where(company_id: 21)

答案 2 :(得分:1)

@referral = Referral.joins(:company).select([:id,:company_id]).where(id: 21).first

然后使用

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

答案 3 :(得分:0)

使用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