ruby-on-rails - references - ruby on rails manual
Rails: ActiveRecord-Abfrage basierend auf dem Zuordnungswert (3)
Dies sollte den Trick machen
Report.joins(:server).where('servers.company_id = ?', 5)
Sie könnten auch einen Rahmen dafür hinzufügen
scope :with_company_id, lambda {|id| joins(:server).where('servers.company_id = ?', id) }
und dann schreibe
Report.with_company_id(5)
Ich habe 2 Modelle. Report
und Server
mit einer Beziehung "objects_to" und "has_many" Ich habe eine Accessor-Methode mit delegate
, die es einem Report
ermöglicht, die zugehörige Server.company_id
zu finden. Jetzt möchte ich eine Abfrage für Report
ausführen, die es mir ermöglicht, alle Report
zu finden, die einem bestimmten Server
, der ein bestimmtes company_id
Attribut 5 aufweist.
Hier sind meine zwei Modelle. Und ja, ich weiß, dass die aktuelle Abfrage nicht funktionieren wird, da Report
kein Attribut company_id
.
Und nein, ich möchte company_id
nicht in Report
speichern, da diese Informationen nicht in Report
gehören.
Bericht
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
Server
class Server < ActiveRecord::Base
attr_accessible :company_id
has_many :reports
end
Ich benutze Rails 4.1.7 und die angenommene Antwort funktionierte nicht für mich. Was hat gearbeitet?
Report.joins(:server).where(:servers => {:company_id => 5})
Beachten Sie, dass der Unterschied der Schlüssel in der where-Klausel ist pluralisiert (: Server statt: Server)
Sie können eine Abfrage wie folgt ausführen:
Report.joins(:servers).where(:servers => {:company_id => 5})
Für mich ist dies die sauberere Lösung für Raw SQL.