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.





associations