Forum: Ruby on Rails Keep the Queries Down or "Referencing eagerly loaded models"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B09a3f6cdc4797532647d2d264b5df49?d=identicon&s=25 Jodi Showers (jshow)
on 2006-01-05 23:25
Before I start, I've read the ActiveRecord docs on eager loading, but
for the life of me, I can't seem to get it working.

What I mean by this, is that the eager query looks good (I can paste the
sql dump, but it looks good to me - and runs well independantly), but it
seems that I'm referencing the eagerly loaded data in a way that
activerecord doesn't understand (my assumption) - thus I'm getting a
tonne of extra queries.

[first, the domain:
WorkOrders has_many: WorkOrderItems
&&
WorkOrderItems belongs_to :WorkOrder
WorkOrderItems belongs_to :ProductsAndServices

secondly, the controller looks like:
    @work_order = WorkOrder.find(params[:id])
    @work_order_items = @work_order.WorkOrderItems.find(:all, :include
=> [:WorkOrder, :ProductsAndServices ] )

(you'll note that I'm eagerly loading the work_order from the
work_order_item - that's because the WorkOrderItem model references its
work_order for some processing - see "pst" below)

And in the view, I reference as such:

@work_order_items.each {|item| @work_order_items_table.data <<
Hash["Part #", item.ProductsAndServices.part_number,"Description",
item.description, "Quantity",item.quantity, "Price",
number_to_currency(item.price), "Extended",
number_to_currency(item.sub_total)]}

The above generates @work_order_items.count queries to the
ProductsAndServices table. Why is that? Do I reference the eagerly
loaded data incorrectly?

With the same symptom, further down in the same view I make a call to a
WorkOrderItems method "pst" - this method references both eagerly
referenced models - WorkOrders and ProductsAndServices using the syntax:

#calculate the line item pst
def pst
 if (self.WorkOrder.charge_pst? and
self.ProductsAndServices.charge_pst?)
       sub_total * 0.07
 else
       0.0
 end
end

Again, I see that database queries are made to retrieve both WorkOrder
and ProductsAndServices.


Probably the same problem on my part. Any ideas ninjas?

Thanx for any help.

Jodi
This topic is locked and can not be replied to.