2011-04-26 86 views
0

我正在开发一个关于Rails 3中礼品列表的Web应用程序。我想要获得某个列表的所有购买信息。这些模型和它们之间的关系:如何构建以下查询

class Gift < ActiveRecord::Base 
    belongs_to :list 
    has_many :purchases 

class List < ActiveRecord::Base 
    has_many :gifts 

class Purchase < ActiveRecord::Base 
    belongs_to :gift 

所以,基本上,我已经试过下面的代码(我不认为这是做这在所有的最好方式),并eventhough结果是正确的,我意识到,我得到一个Gift对象,而不是一个Purchase

@purchases = List.find(params[:id]).gifts.joins(:purchases).select("purchases.*") 

任何想法?

回答

2
@purchases = List.find(params[:id]). 
        gifts.joins(:purchases). 
        map(&:purchases).flatten 

或只是重构你的模型:

class List < ActiveRecord::Base 
    has_many :gifts 
    has_many :purchases, :through => :gifts 

所以

List.find(params[:id]).purchases 
+0

这就是我一直在寻找的重构!我已将:购买关系添加到列表模型。 – 2011-04-26 20:13:24

1

如果你想把所有的采购也许......

@purchases= List.find(params[:id]).gifts.collect{|g| g.purchases} 

虽然你可能需要将其拆分,确认List.find返回一个有效的列表。

+0

虽然我更喜欢@ fl00r回答 – 2011-04-26 20:09:58