我有2个型号。 Report
和Server
具有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
答案 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