2つのモデルがあります。 Report
およびServer
は、belongs_toおよびhas_manyの関係にあります。 delegate
が関連するServer.company_id
を見つけることを可能にするReport
を使用して、アクセサーメソッドを作成しました。ここで、Report
に対してクエリを実行して、特定のcompany_id
属性が5である特定のReport
に関連付けられているすべてのServer
を検索できるようにします。
これが私の2つのモデルです。はい、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
次のようなクエリを実行できます。
Report.joins(:servers).where(:servers => {:company_id => 5})
私にとって、これは生のSQLに対するよりクリーンなソリューションです。
私はRails 4.1.7を使用していますが、受け入れられた答えは私にとってはうまくいきませんでした。
Report.joins(:server).where(:servers => {:company_id => 5})
違いはwhere句のキーが複数形であることに注意してください(:serverではなく:servers)
これはトリックを行う必要があります
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)