2011-08-27 70 views
2

我有一些嵌套的模型,看起來像:Rails的,嵌套的has_many關聯,發現所有的孩子

class Company 
    has_many :managers 
end 

class Manager 
    has_many :employees 
end 

class Employee 
    has_many :tasks 
end 

class Task 
end 

所以這一切都很好,但如果我在Company控制器和我想要得到的所有Task.ids該公司的所有員工?最大的問題是,Mongoid沒有像has_many :through => resource_name像AR這樣做,我怎麼能避免這樣醜陋的東西:

@company = Company.find params[:id] 

@company.managers.each do |manager| 
    manager.employees.each do |employee| 
    employee.tasks.each do |task| 
     puts task.id 
    end 
    end 
end 

回答

5

也許有一個Rails的方式來做到這一點,我不知道,但你可以很使用一些簡單的Ruby掛羊頭賣狗肉:

puts @company.managers.map(&:employees).flatten.map(&:tasks).flatten.map(&:id) 
1

我知道這個問題是長期的,因爲回答,但我碰到的職位,並希望注意,以下可能是一個稍微更緊湊的解決方案:

puts @company.managers.map(&:employees).flat_map(&:tasks).flat_map(&:id)

相關問題