mercredi 26 juillet 2017

How to query rails way ? Rails 3.2

List of relationship between models:

class ErrorScope  < ActiveRecord::Base
  belongs_to :server
  has_many :scope_to_fixflow_map
  attr_accessible :id, :server_id, :error_codes, :scoping_method, :priority, :error_codes_is_wildcard_match
  serialize :error_codes
  .....
end

class ScopeToFixflowMap < ActiveRecord::Base
  belongs_to :error_scope
  attr_accessible :id, :server_id, :error_scope_id, :path, :fixflow_class_name
  ......
end

class Server < ActiveRecord::Base
  has_many :error_scopes 
  ......
end

Now i have a sql query which gives me desired output:

SELECT fixflow_class_name 
FROM error_scopes s
join scope_to_fixflow_maps m on s.id=m.error_scope_id
join servers serv on serv.id=s.server_id
where error_codes regexp 'error_scope_test'
and path = 'x'
and assettag = 'y'

What I tried so far. It works

ErrorScope.where("error_codes like ?", "%error_scope_test\n%").select {|tag| tag.server.assettag == "y"}[0].scope_to_fixflow_map.select {|y| y.path == "x"}[0].fixflow_class_name

using joins

ErrorScope.joins(:server, :scope_to_fixflow_map).where("error_codes LIKE ?", "%error_scope_test%").select {|tag| tag.server.assettag == "y"}[0].scope_to_fixflow_map.select {|y| y.path == "x"}[0].fixflow_class_name

I am sure there must be better way to do this query??

Aucun commentaire:

Enregistrer un commentaire