J'ai 2 modèles. Report
et Server
qui ont une relation d'appartenance et de has_many. J'ai créé une méthode d'accesseur en utilisant delegate
qui permet à un Report
de trouver son Server.company_id
Associé. Maintenant, je veux exécuter une requête sur Report
qui me permet de trouver tous les Report
qui sont associés à un Server
spécifique qui a un attribut company_id
Spécifique de 5.
Voici mes deux modèles. Et oui, je sais que la requête actuelle ne fonctionnera pas puisque Report
n'a pas d'attribut company_id
.
Et non, je ne veux pas stocker company_id
À l'intérieur de Report
car ces informations n'appartiennent pas à Report
.
Signaler
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
Serveur
class Server < ActiveRecord::Base
attr_accessible :company_id
has_many :reports
end
Vous pouvez effectuer une requête comme celle-ci:
Report.joins(:servers).where(:servers => {:company_id => 5})
Pour moi, c'est la solution la plus propre au SQL brut.
J'utilise Rails 4.1.7 et la réponse acceptée n'a pas fonctionné pour moi. Ce qui a fonctionné est
Report.joins(:server).where(:servers => {:company_id => 5})
Notez que la différence est la clé dans la clause where est pluralisée (: serveurs au lieu de: serveur)
Cela devrait faire l'affaire
Report.joins(:server).where('servers.company_id = ?', 5)
vous pouvez également ajouter une portée pour cela comme si
scope :with_company_id, lambda {|id| joins(:server).where('servers.company_id = ?', id) }
puis écrire
Report.with_company_id(5)