Rails:基于关联值的ActiveRecord查询

时间:2013-10-21 07:59:08

标签: ruby-on-rails ruby activerecord associations

我有2个型号。 ReportServer具有belongs_to和has_many关系。我使用delegate创建了一个访问者方法,允许Report找到其关联的Server.company_id。现在,我想在Report上运行一个查询,该查询允许我查找与特定Report属性为5的特定Server相关联的所有company_id < / p>

这是我的两个型号。是的,我知道当前的查询无效,因为Report没有属性company_id

不,我不想将company_id存储在Report内,因为该信息不属于Report

报告

class Report < ActiveRecord::Base

 belongs_to :server

 delegate :company_id, :to => :server

    class << self

        def method(url, base_url)
            #Report.where(company_id: 5)
        end
    end

end

服务器

class Server < ActiveRecord::Base

 attr_accessible :company_id

 has_many :reports

end

4 个答案:

答案 0 :(得分:74)

您可以执行以下查询:

Report.joins(:servers).where(:servers => {:company_id => 5})

对我来说,这是原始SQL的更清晰的解决方案。

答案 1 :(得分:36)

我正在使用Rails 4.1.7,并且接受的答案对我不起作用。做了什么

Report.joins(:server).where(:servers => {:company_id => 5})

请注意,区别在于where子句是多元化的键(:服务器而不是:服务器)

答案 2 :(得分:17)

这应该可以解决问题

Report.joins(:server).where('servers.company_id = ?', 5)

您还可以为此添加范围

scope :with_company_id, lambda {|id| joins(:server).where('servers.company_id = ?', id) }

然后写

Report.with_company_id(5)

答案 3 :(得分:-6)

Server.where(company_id:5).first.reports