ruby on rails - references - Rieles: consulta ActiveRecord basada en el valor de asociación
rails references (4)
Tengo 2 modelos. Report
y Server
que tienen una relación belongs_to y has_many. Server.company_id
un método de acceso usando un delegate
que permite que un Report
encuentre su Server.company_id
asociado. Ahora, deseo ejecutar una consulta en el Report
que me permita encontrar todos los Report
que están asociados con un Server
específico que tiene un atributo company_id
específico de 5.
Aquí están mis dos modelos. Y sí, sé que la consulta actual no funcionará, ya que el Report
no tiene un atributo company_id
.
Y no, no quiero almacenar company_id
dentro del Report
ya que esa información no pertenece al Report
.
Informe
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
Servidor
class Server < ActiveRecord::Base
attr_accessible :company_id
has_many :reports
end
Esto debería funcionar
Report.joins(:server).where(''servers.company_id = ?'', 5)
también podría agregar un alcance para esto como tal
scope :with_company_id, lambda {|id| joins(:server).where(''servers.company_id = ?'', id) }
y luego escribe
Report.with_company_id(5)
Estoy usando Rails 4.1.7 y la respuesta aceptada no funcionó para mí. Lo que funcionó es
Report.joins(:server).where(:servers => {:company_id => 5})
Tenga en cuenta que la diferencia es la clave en la cláusula where pluralizada (: servidores en lugar de: servidor)
Puede realizar una consulta como esta:
Report.joins(:servers).where(:servers => {:company_id => 5})
Para mí, esta es la solución más limpia para SQL sin formato.
Server.where (company_id: 5) .first.reports