我正在开发一个关于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
所以,基本上,我已经尝试了以下代码(我不认为这是最好的方式来做到这一点),即使结果是正确的,我已经意识到,我得到了一个Gift
对象而不是Purchase
:
@purchases = List.find(params[:id]).gifts.joins(:purchases).select("purchases.*")
任何想法?
@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
如果你想要所有的购买也许…
@purchases= List.find(params[:id]).gifts.collect{|g| g.purchases}
尽管你可能想把它分开并检查List。find返回一个有效的List。