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