开发者

Rails 3: Querying from associated tables

Im very new to Ruby on Rails 3 and ActiveRecord and seem to have been thrown in at the deep end at work. Im struggling to get to grips with querying data from multiple tables using joins.

A lot of the examples Ive seen either seem to be based on much simpler queries or use < rails 3 syntax.

Given that I know the business_unit_group_id and have the following associations how would I query a list of all related Items and ItemSellingPrices?

class BusinessUnitGroup < ActiveRecord::Base
  has_many :business_unit_group_items
end

class BusinessUnitGroupItem < ActiveRecord::Base
  belongs_to :business_unit_group
  belongs_to :item
  belongs_to :item_selling_price
end

class Item < ActiveRecord::Base
  has_many :business_unit_group_items
end

class ItemSellingPrice < ActiveRecord::Base
  has_many :business_unit_group_items
end

I'm confused as to whether I need to explicity specify any joins in 开发者_JAVA百科the query since the associations are in place.


Basically, you do not need to specify the joins:

 # This gives you all the BusinessUnitGroupItems for that BusinessUnitGroup
 BusinessUnitGroup.find(id).business_unit_group_items

 # BusinessUnitGroupItem seems to be a rich join table so you might
 # be iterested in the items directly:
 class BusinessUnitGroup < ActiveRecord::Base
   has_many :items through => :business_unit_group_items
   # and/or
   has_many :item_selling_prices, through => :business_unit_group_items
   ...
 end
 # Then this gives you the items and prices for that BusinessUnitGroup:
 BusinessUnitGroup.find(id).items
 BusinessUnitGroup.find(id).item_selling_prices

 # If you want to iterate over all items and their prices within one 
 # BusinessUnitGroup, try this:
 group = BusinessUnitGroup.include(
   :business_unit_group_item => [:items, :item_selling_prices]
 ).find(id)
 # which preloads the items and item prices so while iterating,
 # no more database queries occur
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜