I can’t seem to find a solution to the folowing problem.
I have 3 resources that are all bound to eachother like this:
class Item < ActiveRecord::Base
belongs_to :item_category
// has a date and amount attr
end
class ItemCategory < ActiveRecord::Base
has_many :items
has_many :item_tops
// groups the items in categories
end
class ItemTop < ActiveRecord::Base
belongs_to :item_category
// has a start and stop date and an amount attr
end
The thing I would like to do now starts from the ItemTop resource. When
I do a search, it will search for all ItemTop resources where the start
and stop dates are between or equal to 2 dates the user inserted in the
search box.
The result of the search must contain the following data:
the ItemTop amount and the ItemCategory it reflects upon (this I have so
far).
But next, it must show the total sum of the amounts of the Item
resources where the Item.date also resigns between the 2 dates the user
added. I have no idea how I can get this implemented in clean Ruby
style.
I don’t want to come over like a lazy person that just want someone else
to write the code for him. I know a way, but it is not the best idea due
to performance issues.
The way I’m working now it to define the following method in my model:
def actual
total = BigDecimal.new(“0”)
item_category.items.each do |set|
if set.set_date >= start_date && set.set_date <= stop_date
total += set.amount
end
end
return total
end
It gets the job done, but it iterates over every item. Is there a way to
solve this by just retrieve the good items from the database instead of
all the items?