Adding new Methods to your association for advanced queries

You're not limited to the functionality that Rails automatically builds into association proxy objects. You can also extend these objects through anonymous modules, adding new finders, creators, or other methods. For example:

class Customer < ActiveRecord::Base  has_many :orders do 
   def find_customer_by_order_id(order_id)
     o=Order.find(order_id)
     o.customer
   end 
  end
end
now in console:
>>c=Customer.first
 #<Customer id: 1, name: "ttttttttttt", created_at: "2015-04-29 12:30:13", updated_at: "2015-05-05 10:36:06", orders_count: 1> 
>>c.orders.find_customer_by_order_id(2)
 #<Customer id: 1, name: "ttttttttttt", created_at: "2015-04-29 12:30:13", updated_at: "2015-05-05 10:36:06", orders_count: 1>  



If you have an extension that should be shared by many associations, you can use a named extension module. For example:
module FindRecentExtension
  def find_recent
    where("created_at > ?", 5.days.ago)
  end
end
class Customer < ActiveRecord::Base
  has_many :orders, -> { extending FindRecentExtension }
end
class Supplier < ActiveRecord::Base
  has_many :deliveries, -> { extending FindRecentExtension }
end


Comments

Popular posts from this blog

Installing Wowza Streaming Engine on ubuntu

Highcharts with grouped categories

Completely Uninstall and Install Rubymine on ubuntu