我正在开发一个关于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
有什么想法吗?
答案 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。