68

我有2个模型。Report并且Server具有belongs_to 和has_many 关系。我创建了一个访问器方法,使用delegate它允许 aReport找到其关联的Server.company_id. 现在,我想运行一个查询Report,允许我找到与具有特定的特定Report关联的所有Servercompany_id属性 5

这是我的两个模型。是的,我知道当前查询不会工作,因为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

3 回答 3

95

您可以执行如下查询:

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

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

于 2013-10-21T08:18:24.297 回答
48

我正在使用 Rails 4.1.7,接受的答案对我不起作用。什么工作是

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

请注意,区别在于 where 子句中的键是复数形式(:servers 而不是 :server)

于 2015-09-08T21:39:36.387 回答
24

这应该可以解决问题

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)
于 2013-10-21T08:04:48.750 回答