through references rails new has_one has_many has_and_belongs_to_many example active ruby-on-rails ruby activerecord associations

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