Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: ActiveRecord query based on association value

I have 2 models. Report and Server that have a belongs_to and has_many relationship. I created an accessor method using delegate that allows a Report to find its associated Server.company_id. Now, I want to run a query on Report that allows me to find all Report that are associated with a specific Server that has a specific company_id attribute of 5.

Here are my two models. And yes I know the current query wont work since Report does not have an attribute company_id.

And no, I dont want to store company_id inside of Report since that information doesn't belong in Report.

Report

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 
like image 701
user2158382 Avatar asked Oct 21 '13 07:10

user2158382


1 Answers

You can perform a query like this:

Report.joins(:servers).where(:servers => {:company_id => 5}) 

To me, this is the cleaner solution to raw SQL.

like image 166
KappaNossi Avatar answered Sep 22 '22 19:09

KappaNossi