如何构建以下查询

时间:2011-04-26 19:49:32

标签: ruby-on-rails-3

我正在开发一个关于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

所以,基本上,我已经尝试了以下代码(我认为这根本不是最好的方法),尽管结果是正确的,但我意识到我得到了{{1} } object而不是Gift

Purchase

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果你想购买所有商品......

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

虽然您可能想要将其拆分并检查List.find是否返回有效的List。